удалять файлы после вставки в 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 но он не похож на него. любые подсказки?

  • Как рассказать xargs, какой аргумент выбрать?
  • Как уменьшить количество исполнений с помощью xargs -I
  • Удалите все повторяющиеся слова из строки, используя сценарий оболочки
  • Импортировать SQL-файлы с помощью xargs
  • find + xargs: строка аргумента слишком длинная
  • Почему параметр xargs -i устарел?
  • Как создать бесконечный поток строк в bash
  • Передача нескольких аргументов в середине команды с помощью 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 - лучшая ОС в мире.