Script для создания отдельных zip файлов для каждого .txt файла, который он находит и перемещает после

Мне нужна оболочка script, которая в основном делает это:

  • Поиск в папке для всех файлов txt и для каждого найденного создает индивидуальный zip файл с тем же файлом txt, который он нашел +.zip.
  • После этого перемещается созданный zip файл в файл txt.

В основном это a script, чтобы заменить список файлов txt на его zip-эквивалент, но сохраняя одно и то же имя.

Я использовал find, чтобы найти файлы, которые я хочу сделать zip:

find . -name '.txt.' -print

Результаты:

./InstructionManager.txt.0
./InstructionManager.txt.1

Это файлы, которые я хочу пометить отдельно (конечно, они будут намного больше), но не знают, как использовать их в качестве аргументов отдельно для make commans, например:

zip ./InstructionManager.txt.0.zip ./InstructionManager.txt.0
mv ./InstructionManager.txt.0.zip ./InstructionManager.txt.0
zip ./InstructionManager.txt.1.zip ./InstructionManager.txt.1
mv ./InstructionManager.txt.1.zip ./InstructionManager.txt.1

Любые идеи? И нет, я не хочу zip со всеми файлами: S Благодаря

Ответ 1

find . -name '*.txt.*' -print -exec zip '{}'.zip '{}' \; -exec mv '{}'.zip '{}' \;
  • Найдите файлы .txt
  • Первый -exec застегивает файлы
  • Второй -exec переименовывает сжатые файлы в исходные имена

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

file InstructionManager.txt.*

Который должен вернуться:

InstructionManager.txt.0: Zip archive data, at least v1.0 to extract
InstructionManager.txt.1: Zip archive data, at least v1.0 to extract

Ответ 2

Использование find и zip:

find . -name '*.txt.*' -exec zip '{}.zip' '{}' \;

Ответ 3

С find и xargs имена файлов с принятыми пробелами:

find . -name '*.txt.*' -print0 | xargs -0 -r -n1 -I % sh -c '{ zip %.zip %; mv %.zip %;}'

файлы заархивированы, а затем переименованы в их исходное имя