2016-12-04 2 views
0

Случайные например:«найти» все файлы .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. Что я делаю неправильно, и как я могу это исправить?

+2

Вы не можете использовать '{}' несколько раз. Вы можете взглянуть на [это] (http://stackoverflow.com/questions/12965400/use-current-filename-multiple-times-in-find-exec) – rdupz

+0

@rdupz Спасибо! (Добавлено ответ.) –

ответ