我正在创建一个bash脚本,其中包含一个将文件压缩到新存档的函数。
基本示例:
archive_path="/foo.7z"
target="/bar.txt"
7z a $archive_path $target
我遇到的问题是,我只想创建一个新的存档。如果/foo.7z
中有任何现有的归档文件,则不应将bar.txt
添加到其中。相反,提示用户为归档文件创建新名称,或者在末尾添加一个数字并创建新归档文件(例如/foo-1.7z
(。
我在文档、SO或普通互联网搜索中找不到任何解释如何使用7zip原生实现这一点的内容,这似乎很奇怪,因为我认为这在用户中是一个非常常见的要求。
我能想到的唯一解决方案是自己手动完成,大致如下:
archive_path="/foo.7z"
target="/bar.txt"
while [ -f $archive_path ]; do
read -p "'$archive_path' already exists. Enter new path for archive: " archive_path
done
7z a $archive_path $target
有没有其他方法可以用7zip原生完成,或者我需要自己处理吗?
似乎没有任何方法可以用来实现这一点,只有7z。虽然存在一个";新档案";切换到update标志,它将创建新名称和旧名称,此外,当新名称也存在时,还会遇到问题。最好的选择是做你已经做过的事情,或者,这样的事情可以在中工作
arc='archive.7z'
new_arc=${arc}
target='file.txt'
while [[ -f ${new_arc} ]]; do
((i++))
new_arc=${arc%.*}${i}.${arc#*.}
done
7z a "${new_arc}" "${target}"
这将重命名存档文件名,在扩展名之前添加一个整数(每个循环+1(,直到找不到该名称的文件为止。所以你会得到archive.7z
archive1.7z
archive2.7z
archive3.7z
等等。