$ find /tmp/a1
/tmp/a1
/tmp/a1/b2
/tmp/a1/b1
/tmp/a1/b1/x1
просто пытаетсясмолка результаты находят на HP-UX
find /tmp/a1 -exec tar -cvf dirall.tar {} \;
просто не работает
помощь
$ find /tmp/a1
/tmp/a1
/tmp/a1/b2
/tmp/a1/b1
/tmp/a1/b1/x1
просто пытаетсясмолка результаты находят на HP-UX
find /tmp/a1 -exec tar -cvf dirall.tar {} \;
просто не работает
помощь
Команда для указания -exec
запускается один раз для каждого найденного файла. Таким образом, вы каждый раз запускаете команду dirall.tar. Вместо этого вы должны вывести вывод find в tar.
find /tmp/a1 -print0 | tar --null -T- -cvf dirall.tar
Обратите внимание, что если вы просто используете find
, чтобы получить список всех файлов в /tmp/a1
и не делать каких-либо фильтрации, это намного проще в использовании tar -cvf dirall.tar /tmp/a1
.
Я думаю, что что-то вроде «find/tmp/a1 | xargs tar cvf foo.tar» будет работать. Но сначала убедитесь, что у вас есть резервные копии!
Есть ли у hpux cpio? Это займет список файлов на stdin, а некоторые версии будут записывать выходные данные в формате tar.
Вы один символ вдали от решения. Команда find
команды exec
выполнит команду для для каждого файла, поэтому вы должны заменить -c
на -r
, чтобы положить tar
в режим добавления. Каждый раз, когда find
вызывает его, он будет лавировать на еще один файл:
rm -f dirall.tar
find /tmp/a1 -exec tar -rvf dirall.tar {} \;
Вы можете указать только одну опцию «функция». Здесь у вас два - '-c' и' -r'. Отбросьте '-c' (и укажите или выйдите из' {} '), и он должен работать. – jamessan
Спасибо за ловушку опечатки - я должен был сначала попробовать эту команду. Я отредактировал ответ, чтобы удалить параметр -c. Кроме того, не нужно избегать {} в оболочке на основе Bourne. –
Или даже дегтя -cvf \ 'найти/TMP/a1 \' теперь, когда я думаю об этом :) На самом деле, если вы смолке/tmp/a1, вы все равно получите все. Возможно, я не понимаю проблему. – barrycarter
Да, я просто предполагал, что «находка» была на самом деле более сложной и что вопрос сводился к простому сценарию. – jamessan