Случайные например:«найти» все файлы .log в каталоге, скопировать их в другой каталог, названный в честь родительского каталога?
/stack-exchange/
|
|-- stack-overflow/
| |-- questions/
| |-- people/
| |-- site.log
|-- super-user/
| |-- questions/
| |-- people/
| |-- answers.log
|-- ask-ubuntu/
| |-- questions/
| |-- people/
| |-- linux.log
|-- logs/
Это команда, которую я хотел бы использовать, чтобы find
все файлы журналов в заданном каталоге:
find /stack-exchange/ -type f -name "*.log"
Теперь, отправляясь на примере, я хотел бы, чтобы скопировать все 3 файла журнала (site.log, answers.log & linux.log) в /stack-exchange/logs
директории и их имени их родительского каталога, например, так:
/stack-exchange/
|
|-- [...]
|
|-- logs/
| |-- stack-overflow.log
| |-- super-user.log
| |-- ask-ubuntu.log
Как это сделать? Я пробовал:
find /stack-exchange/ -type f -iname "*.log" -exec cp "{}" "../logs/$(basename "$(dirname "{}")").log" \;
Я думаю, что я близко, но это не работает. Все, что он делает, это создать файл ..log
. Что я делаю неправильно, и как я могу это исправить?
Вы не можете использовать '{}' несколько раз. Вы можете взглянуть на [это] (http://stackoverflow.com/questions/12965400/use-current-filename-multiple-times-in-find-exec) – rdupz
@rdupz Спасибо! (Добавлено ответ.) –