Симлинк все файлы, но скопировать определенные расширения

535
Mike

Мне интересно, как я смогу сделать символическую ссылку на все файлы в структуре dir, а затем также скопировать файлы с определенным расширением в этот dir. Я в основном символические ссылки всех файлов в / foo / a, b, c на / bar / a, b, c, а затем копирую определенные файлы с определенными расширениями.

2
Я предполагаю, что это Linux? soandos 13 лет назад 0
Да, извините, в Linux. Mike 13 лет назад 0
Были ли / foo / a / foo / b foo / c каталогами? Так как вам нужна вся структура каталогов, скопированная в / foo, символическая ссылка на все файлы не определенного ext (в дереве / foo) и, наконец, копирование всех файлов определенного ext (в дереве / foo)? Nicholi 13 лет назад 0

1 ответ на вопрос

0
Nicholi

Из каталога / bar создать все символические ссылки для всего, кроме этих расширений.

find ../foo/ -type f ! -name '*.txt' ! -name '*.baz' -exec ln -s '{}' \; 

И затем, чтобы скопировать все расширения, та же команда по большей части.

find ../foo/ -type f \( -name "*.txt" -o -name "*.baz" \) -exec cp '{}' ./ \; 

Редактировать : копировать всю структуру каталогов, символическую ссылку на некоторые файлы, копировать другие. Сначала я не был уверен, возможно ли это с помощью одной команды, но изучил некоторые другие полезные приемы с помощью find.

find foo/ -type d -printf "mkdir -vp 'bar/%p'\n" -o -type f ! -name "*.txt" ! -name "*.baz" -printf "ln -vs '../%p' 'bar/%p'\n" -o -type f \( -name "*.txt" -o -name "*.baz" \) -printf "cp -v %p bar/%p\n" | sh mv bar/foo/* bar/ && rm -R bar/foo/ 

Важно отметить, что при создании символической ссылки вы указываете фактический путь, по которому ссылки будут ссылаться на foo /. Мой пример показывает относительные ссылки, когда они расположены рядом (может также создавать абсолютные символические ссылки).

Отличная работа, которая творит чудеса! Спасибо, что поделились знаниями о находке! Хорошая вещь.. Mike 13 лет назад 0

Похожие вопросы