удалять файлы после вставки в tarball

Я хочу ограничить количество файлов, которые попадают в tar-мяч, и вырезать их после того, как они были вставлены в tarball и станут независимыми от текущего каталога. Я пробовал это: tar -C ~/semios/tmp/ -cjvf ~/semios/tmp/test.tar.bz2 $(cd ~/semios/tmp/; ls *| head -5) | xargs rm -f tar -C ~/semios/tmp/ -cjvf ~/semios/tmp/test.tar.bz2 $(cd ~/semios/tmp/; ls *| head -5) | xargs rm -f но это оставляет файлы, в которых они находятся, поскольку подробный параметр tar только печатает имя файла, а не весь путь, я думал, что могу исправить его аргументом -C но он не похож на него. любые подсказки?

  • Команда, которая печатает содержимое файла, указанное имя файла на stdin
  • GNU параллельна чрезмерно медленной
  • Импортировать SQL-файлы с помощью xargs
  • создать хеш md5 из рекурсивного списка файлов, когда некоторые пути имеют пробелы
  • GNU parallel vs & (я имею в виду фон) vs xargs -P
  • grep для файлов и открыть итоговые совпадения
  • Как я могу объединить все файлы в каталоге вместе в одной операции с командной строкой?
  • Когда вы должны использовать подоболочки vs `xargs`?
  • 2 Solutions collect form web for “удалять файлы после вставки в tarball”

    Предполагая, что на путях нет злых символов (пробелы, символы новой строки):

     ... $(ls ~/semios/tmp/*| head -5) | xargs -d '\n' rm -f 

    или

     ... | { cd ~/semios/tmp/; xargs -d '\n' rm -f; } 

    или

     tar -C ~/semios/tmp/ -cjvf ~/semios/tmp/test.tar.bz2 \ $(cd ~/semios/tmp/; ls * | head -5 | { while read file; do echo "$file"; rm -f "$file"; done;}) 

    редактировать

    Поскольку xargs использует любые пробелы как разделители по умолчанию, xargs должна быть установлена ​​как единственный разделитель. Но из-за $() этот пример может сбой даже с пробелом в имени.

    или

    $ tar -cjf test.tar.bz2 $(find ~/semios/tmp/ -name "*"| head -5 | xargs rm -f)

    Linux и Unix - лучшая ОС в мире.