Итак, чего я в основном хочу добиться, так это сделать архив каждого файла в указанном каталоге, чтобы имя полученного архива состояло из даты создания сжатого файла.
Скажем, у нас есть каталог, в котором находится файл 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