2010-06-02 2 views

ответ

3

Команда для указания -exec запускается один раз для каждого найденного файла. Таким образом, вы каждый раз запускаете команду dirall.tar. Вместо этого вы должны вывести вывод find в tar.

find /tmp/a1 -print0 | tar --null -T- -cvf dirall.tar 

Обратите внимание, что если вы просто используете find, чтобы получить список всех файлов в /tmp/a1 и не делать каких-либо фильтрации, это намного проще в использовании tar -cvf dirall.tar /tmp/a1.

+0

Или даже дегтя -cvf \ 'найти/TMP/a1 \' теперь, когда я думаю об этом :) На самом деле, если вы смолке/tmp/a1, вы все равно получите все. Возможно, я не понимаю проблему. – barrycarter

+0

Да, я просто предполагал, что «находка» была на самом деле более сложной и что вопрос сводился к простому сценарию. – jamessan

0

Я думаю, что что-то вроде «find/tmp/a1 | xargs tar cvf foo.tar» будет работать. Но сначала убедитесь, что у вас есть резервные копии!

0

Есть ли у hpux cpio? Это займет список файлов на stdin, а некоторые версии будут записывать выходные данные в формате tar.

1

Вы один символ вдали от решения. Команда find команды exec выполнит команду для для каждого файла, поэтому вы должны заменить -c на -r, чтобы положить tar в режим добавления. Каждый раз, когда find вызывает его, он будет лавировать на еще один файл:

rm -f dirall.tar 
find /tmp/a1 -exec tar -rvf dirall.tar {} \; 
+0

Вы можете указать только одну опцию «функция». Здесь у вас два - '-c' и' -r'. Отбросьте '-c' (и укажите или выйдите из' {} '), и он должен работать. – jamessan

+0

Спасибо за ловушку опечатки - я должен был сначала попробовать эту команду. Я отредактировал ответ, чтобы удалить параметр -c. Кроме того, не нужно избегать {} в оболочке на основе Bourne. –

Смежные вопросы