Я думаю, что в этом случае Вы могли использовать
find ./ -name \*.foo | xargs gedit
cd /tmp/backup
find . -name '*.php' | cpio -pmud /home/mysite/public_html
На последних версиях удара можно включить globstar (shopt -s globstar
), и затем сделайте:
cd /tmp/backup
tar cvf - **/*.php | tar xvf - -C /home/mysite/public_html
** соответствия все файлы, директора и subdirs
Я использую tar
здесь, потому что это сохраняет структуру каталогов.
С инструментами POSIX используйте мир (замена POSIX к tar и cpio):
cd /tmp/backup
find . -name '*.php' | pax -rw -pp /home/mysite/public_html
С zsh сначала создайте целевые каталоги, затем скопируйте файлы. Вставьте первые две строки Ваш ~/.zshrc
.
autoload zmv
alias zcp='zmv -C' zln='zmv -L'
cd /tmp/backup
mkdir -p **/*.php(e\''REPLY=/home/mysite/public_html/${REPLY:h}'\')
zcp '(**/)(*.php)' '/home/mysite/public_html/$1$2'
(Здесь, zsh имеет преимущество перед стандартным методом, потому что zcp
не имеет способа создать целевые каталоги по мере необходимости.)
find /tmp/backup/ -name "*.php" | xargs -I % cp % /home/mysite/public_html
обновленный ответ, выполненный ниже команды один после другого. это сохранит структуру каталогов также:
cp /tmp/backup /home/mysite/public_html
find /home/mysite/public_html -not -name "*.php"|xargs rm -rf
find
команда распечатает, /home/mysite/public_html
, который rm
покорно удалит. Даже если find
команда была исправлена для исключения каталогов, любой файл, который не был результатом копии, будет удален, который не находится в требовании. Кроме того, xargs
ожидает формат ввода это find
не производит, поэтому если существуют какие-либо файлы со специальными символами (пробел или \'"
) на их имена, xargs
передаст непреднамеренные имена к rm
, и файлы где угодно в системе могут быть удалены.
– Gilles 'SO- stop being evil'
02.06.2011, 20:43