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 %;}'
файлы заархивированы, а затем переименованы в их исходное имя