2009-10-13 2 views
26

Любой имеет альтернативный способ поиска и копирования файлов в Баш чем:Bash: найти и скопировать

find . -ctime -15 | awk '{print "cp " $1 " ../otherfolder/"}' | sh

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

Существуют ли другие способы упорядочения команд для списка файлов?

Благодаря

+1

Похожих Q & A 1 + 1/2 года спустя: http://stackoverflow.com/ q/5241625/1172302 –

ответ

62

Я бы рекомендовал использовать find «s -exec вариант:

find . -ctime 15 -exec cp {} ../otherfolder \;

Как всегда, консультируйтесь справочную страницу для получения наилучших результатов.

+0

На странице поиска человека можно использовать одинарные кавычки вокруг фигурных скобок, так как они могут быть неверно истолкованы без них. –

+4

Вы должны заменить '\;' на '+', чтобы не запускать 'cp' каждый раз. – BroSlow

+3

@BroSlow Не знаю, почему, но это работает только с \; и с + я получаю «отсутствующий аргумент для -exec». – hayavuk

8

Я обычно использую этот один:

find . -ctime -15 -exec cp {} ../otherfolder/ \; 
-1

-exec, скорее всего, путь, если вы не слишком много файлов. Затем используйте xargs.

4

Вы можете сделать это с xargs:

$ find . -ctime 15 -print0 | xargs -0 -I{} cp {} ../otherfolder 

Смотрите также grep utility in shell script.

+1

Преимущество этого заключается в том, что он быстрее, чем 'find -exec', потому что он не создает новый процесс' cp' для каждого файла. Однако, если у вас есть GNU find, вы можете использовать 'find -exec ... +' вместо 'find -exec ... ';'' для того же эффекта :) – hobbs

8

Если ваш cp является ГНУ:

 
find . -ctime 15 -print0 | xargs -0 cp --target-directory=../otherfolder 
1

Используйте это для копирования и многих других:

for f in (find /apps -type f -name 'foo'); do cp ${f} ${f}.bak; cmd2; cmd3; done; 
Смежные вопросы