У меня есть один каталог, который содержит десятки каталогов внутри него.
Я новичок в командной строке, и я изо всех сил пытаюсь придумать команду, которая заархивирует каждый подкаталог в уникальный файл sub-directory.zip.
Таким образом, в конце мой основной каталог будет заполнен всеми моими исходными подкаталогами, а также соответствующими .zip
файлами, которые содержат сжатый контент каждого подкаталога.
Возможно ли что-то подобное? Если так, пожалуйста, покажи мне, как это делается.
command-line
directory
zip
Evster
источник
источник
Ответы:
Вы можете использовать этот цикл в
bash
:i
это имя переменной цикла.*/
означает каждый подкаталог текущего каталога и будет включать в себя в конце имена косую черту. Убедитесь, что выcd
в нужном месте, прежде чем выполнять это."$i"
просто называет этот каталог, включая косую черту. Кавычки гарантируют, что пробелы в имени каталога не вызовут проблем.${i%/}
похоже,$i
но с удаленной косой чертой, так что вы можете использовать это для создания имени файла zip.Если вы хотите увидеть, как это работает, добавьте
echo
передzip
и вы увидите напечатанные команды вместо выполненных.источник
*/
именах каждые прямые подкаталогов, не каждый потомок каталога. Таким образом, вы получите только молнии для самого верхнего уровня, именно так, как вы хотите. Версия, содержащаясяecho
в нем, продемонстрировала бы этот аспект. Архивирование каждого вложенного каталога в свой собственный файл на самом деле было бы более трудоемким, и, вероятно, лучше всего решить его, используяfind -type d
другие приемы.zip
двоичный файл, вы можете получить другое поведение. Чтобы также создавать zip-файлы для каталогов верхнего уровня (т. Е. Дочерних элементов текущего каталога), начиная с точки, вы также можете использоватьshopt -s dotglob
для сопоставления шаблонов глобуса скрытые файлы.for i in */; do (cd "$i"; zip -r "../${i%/}.zip" .); done