![如何遍历 zip 文件的目录并查找和追加不带 .zip 扩展名的文件](https://linux22.com/image/222306/%E5%A6%82%E4%BD%95%E9%81%8D%E5%8E%86%20zip%20%E6%96%87%E4%BB%B6%E7%9A%84%E7%9B%AE%E5%BD%95%E5%B9%B6%E6%9F%A5%E6%89%BE%E5%92%8C%E8%BF%BD%E5%8A%A0%E4%B8%8D%E5%B8%A6%20.zip%20%E6%89%A9%E5%B1%95%E5%90%8D%E7%9A%84%E6%96%87%E4%BB%B6.png)
我有一个子目录目录,其中包含应该是压缩存档文件的子目录。结构如下图所示
ParentDirectory
|-SubDirectoryA
|-File Mr X.zip
|-File Mr. X
|-SubDirectoryB
|-File Mrs X
|-File Mrs. L.T.D X
我正在尝试更新没有 .zip 扩展名的文件,以下是预期结果
ParentDirectory
|-SubDirectoryA
|-File Mr X.zip
|-File Mr. X.zip
|-SubDirectoryB
|-File Mrs X.zip
|-File Mrs. L.T.D X.zip
我有当前的代码,但不确定如何附加扩展。我还意识到下面的代码正在查找前缀变量中出现的句点,但某些文件名中包含句点。以下是我的尝试
for dir in */; do
(cd "$dir" && for fname in *.*; do
prefix=${fname%.*}
[ ! -f "$fname" ] || [ -f "$prefix.zip" ] && continue
mv -- "$fname" "${fname%}.zip"
done)
done
答案1
您可以使用正则表达式过滤掉已压缩的文件。
re="*.zip"
for dir in */; do
(cd "$dir" && for fname in *; do
case "${fname}" in
$re)
continue
;;
*)
mv -- "$fname" "${fname%}.zip"
;;
esac
done)
done