Использование tar с поиском

Допустим, мы хотим найти определенные файлы, использовать tar и удалить их. Я попытался использовать

touch "mycompress.bz2.tar" find . \( -name "*.c" -o -name "*.sh*" \) -exec tar ujf "mycompress.bz2.tar" {} "+" \; -exec rm {} \; 

Но выполнение этого моего терминала просто закрывается. Как я могу реализовать это правильно?

  • Тар файл с датой как имя?
  • Сжатие tar-файла без извлечения содержимого
  • Включить подкаталог из исключенного каталога в tar-архив
  • Почему был написан шар, если смола уже существовала?
  • Как создать папку, которая изменит его содержимое на то, что имеет папка?
  • tar: короткое чтение
  • Файлы TAR: перемещение файлов из подкаталогов в основной каталог
  • Как переместить вновь созданный файл в определенное место в tarfile
  • 2 Solutions collect form web for “Использование tar с поиском”

    С вашей командой возникает несколько проблем.

    Первый – сжатый архив не может быть обновлен. Вам нужно будет сначала создать несжатый архив, обновить его и, наконец, сжать.

    Второй из них – это синтаксис tar который неверен, предложение first -exec должно использовать либо + terminator, либо \; один, но не оба.

    Третий более тонкий и возникает, если вы держите + terminator, предложение second -exec будет выполняться для каждого файла в последовательности, в то время как первый будет ждать, пока список файлов будет сохранен, чтобы заполнить строку среды, которая будет запущена. Когда это произойдет, все файлы, которые будут сохранены первым -exec будут уже удалены вторым -exec поэтому tar завершится с ошибкой, и вы потеряете все свои файлы.

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

     tar --files-from <(find . \( -name "*.c" -o -name "*.sh*" \)) \ --remove-files -cjf mycompress.bz2.tar 

    GNU tar документирован для удаления файлов только после их сохранения:

     $ man gtar ... --remove-files remove files after adding them to the archive ... 

    Обратите внимание, что команда, которую я предложил, не сможет обрабатывать файлы со встроенной новой строкой, но это должно быть весьма маловероятным событием.

    С одной из обычных реализаций tar это не работает.

    С 1982 года существует бесплатная реализация tar которая называется star .

    star добавила встроенную утилиту find в 2005 году на основе моего libfind .

    Вы вызываете star -c -f file.out -find . \( -name "*.c" -o -name "*.sh*" \) star -c -f file.out -find . \( -name "*.c" -o -name "*.sh*" \)

    Правила для встроенного find просты: все в правой части -find следует правилам командной строки для find(1) .

    См. http://schilytools.sourceforge.net/index.html.

    и страницу звездного человека по адресу: http://schilytools.sourceforge.net/man/man1/star.1.html

    Существует отдельный источник (см. Веб-сайт), но самая последняя и лучшая версия в настоящее время является частью schilytools .

    Пожалуйста, имейте в виду, что ваше желание удалить файлы при их архивации чрезвычайно рискованно, так как может возникнуть проблема с вашей командой, а затем вы бы удалили файлы, которые вы не можете использовать со второй попыткой. Поэтому я рекомендую сначала использовать мое предложение для архивирования файлов, а затем позвонить:

    rm $(star -t -tpath < file.out)

    Это удалит только файлы, которые были успешно помещены в архив.

    Interesting Posts

    При запуске выделите теги и теги отображения в окне предварительного просмотра

    Использование dircolors, как изменить цвет моих папок subversion

    Как отображать только файлы .txt с именем ScheduledJobs в них

    Группирование системных служб

    Как сделать grep на удаленном компьютере и распечатать строку, содержащую эти слова?

    Как скопировать каталог рекурсивно с помощью hardlinks для каждого файла

    Ошибка при создании новой файловой системы xfs: unknow fs type

    Удалите блок строк с условием на последней строке

    Как установить apt-get или YUM в Mac OS X

    Как идентифицировать и убивать запущенные процессы, которые запускаются, выходят, а затем снова запускаются?

    Пользовательские ограничения ограничиваются только одной папкой

    Обновлен менеджер обновлений без запроса пароля

    Как извлечь несколько данных из файла и сохранить его в файле csv?

    Multi GPU Compiz?

    OpenSSH – псевдонимы карт в ~ / .ssh / config для IP-адресов в командной строке

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