Назад | Перейти на главную страницу

Использовать дату создания файла в качестве имени архива при пакетном архивировании (7zip)

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

Скажем, у нас есть каталог, в котором находится файл A. Дата создания файла A - 2008-18-10-20: 12: 54 (мы можем спросить ls чтобы показать нам именно это). Итак, получившийся архив следует назвать 2008-18-10-20: 12: 54.7z и находиться в другом каталоге.

Лучшее, что у меня было, это следующее:

for file in $HOME/tmp; do 
    7z a -mhe=on -mx=0 -p123456 $HOME/tmp-done/`ls -l "$HOME"/tmp/ --time-style=+%Y-%m-%d_%H:%M:%S "$file" | awk '{ print $6 }'`.7z $file;
done

Насколько я понимаю, приведенная выше команда должна инструктировать bash читать все файлы в ~/tmp/ каталог, а затем для каждого файла выполните 7z с аргументами. Одним из аргументов должно быть имя архива, вычисленное из даты создания архивного файла. И файл архива должен быть создан в ~/tmp-done каталог.

Предполагается создать пакет файлов 7z в ~/tmp-done/ каталог, но вместо этого он полностью игнорирует ls часть и создает ~/home/done/.7z файл со всеми сжатыми внутри него файлами.

Я действительно думаю, что мне не хватает способа справиться с этой подкомандой в части аргументов 7z, но я не могу этого понять.

Любое руководство будет оценено.

попробуйте ниже сценарий bash

set -ex

DIR_WITH_FILES="/tmp/myfiles"

DIR_WITH_ARCHIVES="/tmp/myarchives"

for file in $(ls -1 "${DIR_WITH_FILES}"); do 
    filename=$(ls -l --time-style=+%Y-%m-%d_%H:%M:%S "${DIR_WITH_FILES}/${file}" | awk '{ print $6 }')
    7z a -mhe=on -mx=0 -p123456 -- "${DIR_WITH_ARCHIVES}/${filename}.7z"  "${DIR_WITH_FILES}/${file}"
done