Как я могу выборочно скопировать файлы от одного каталога до другого каталога?

Очень простой, это - просто символьная ссылка:

ln -s /foo/live/images /foo/dev/images

Просто смотрите полномочия каталога и т.д. Просмотреть страницу справочника (все доступные варианты) для ln управляйте, введите следующее при подсказке:

man ln
4
10.01.2012, 18:12
3 ответа

В дополнение к eboix's find команда (который, поскольку это стоит повреждения на пробеле, я помещу более безопасный путь или два в конце), можно использовать bash extglob функция:

# turn extglob on
shopt -s extglob 
# move everything but the files matching the pattern
mv dir1/!(*.c) -t dir2
# If you want to exclude more patterns, add a pipe between them:
mv dir1/!(*.c|*.txt) -t dir2

Посмотрите bash страница справочника для больше Вас может сделать с extglob. Обратите внимание, что это не рекурсивно и так только переместит файлы в dir1 непосредственно, не подкаталоги. find метод является рекурсивным.


Более безопасный find команды:

find dir1 ! -name '*.c' -print0 | xargs -0 mv -t dir2
find dir1 ! -name '*.c' -exec mv -t dir2 {} +

Для большего количества шаблонов просто добавьте больше ! -name операторы:

find dir1 ! -name '*.c' ! -name '*.txt' -print0 | xargs -0 mv -t dir2
find dir1 ! -name '*.c' ! -name '*.txt' -exec mv -t dir2 {} +
4
27.01.2020, 20:53

Попробуйте это:

find ./ ! -name '*.c' | xargs -i cp {} dest_dir
2
27.01.2020, 20:53
  • 1
    Это повредится на пробеле, необходимо добавить -print0 / -0 или используйте -exec. –  Kevin 09.01.2012, 04:53
  • 2
    Или не используйте имена файлов со встроенными пробелами или специальными символами (откровенно говоря, хорошая идея!) –   09.01.2012, 06:23
  • 3
    спасибо, что, если я хочу избежать двух или больше файлов? например, '.c' или '.txt'? –  user1002288 09.01.2012, 06:29
  • 4
    @user1002288 Вы добавляете больше ! -name ... операторы, я обновил свой ответ для показа этого. –  Kevin 09.01.2012, 16:36

Вы можете использовать следующую команду из dir1:

cp ls|egrep -v . txt\|.c dir2

В части "ls|egrep -v .txt\|.c" будут перечислены файлы без .c и .txt в имени. cp скопирует их в dir2

0
27.01.2020, 20:53

Теги

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