Как создать отдельный zip-файл для каждого файла .py - PullRequest
0 голосов
/ 29 июня 2018

Мне нужно создать скрипт bash, который создает отдельный zip-файл для каждого файла python в одном каталоге.

Я обнаружил, что следующая команда может создать zip-файл с расширением исходного файла. например, создано test.py.zip для test.py

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

Как мне обновить команду, чтобы избавиться от исходного расширения файла. например test.zip вместо test.py.zip

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вы можете удалить расширение, используя basename <file> <extension>. Есть множество способов сделать это.

Использование цикла в bash

Например, просмотреть результаты из find, а затем архивировать файл:

for f in $(find . -name '*.py')
do 
    zip "$(basename "$f" .py).zip" "$f"
done

Использование подоболочки в find

К сожалению, мы не можем использовать $(...) в find ... -exec напрямую. Однако мы всегда можем вызвать оболочку и сделать это там:

find . -name '*.py' -exec sh -c 'zip "$(basename "$0" .py)".zip "$0"' '{}' \;
0 голосов
/ 29 июня 2018

Вы не можете сделать это с опцией find -exec. Вы можете использовать bash s while loop и sed для обработки вывода find вместо:

find . -name '*.py' -print | while read FILE; do zip `echo $FILE|sed 's/\py$//'`zip $FILE; done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...