![如何迭代给定目录中的文件并检查文件是否存在?](https://linux22.com/image/11019/%E5%A6%82%E4%BD%95%E8%BF%AD%E4%BB%A3%E7%BB%99%E5%AE%9A%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%E5%B9%B6%E6%A3%80%E6%9F%A5%E6%96%87%E4%BB%B6%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8%EF%BC%9F.png)
这是给定目录中的文件列表;
a_object_1.0.zip
file_name_conf_1.1.zip
anim_dup_1.1.zip
迭代给定目录中的文件,并检查文件是否与文件列表中的文件模式匹配,解压缩并使用某个前缀重命名每个文件( cx_a_object_1.0.zip, cx_file_name_conf_1.1.zip, anim_anim_dup_1.1.zip
)
答案1
#!/bin/bash
for szFile in /var/tmp/*.zip;
do
unzip "$szFile";
mv "$szFile" "Prefix_"$(basename -- "$szFile")
done
将要:
- 迭代所有
zip
文件/var/tmp
- 提取它们
- 添加前缀
- 将它们移动到当前目录。
答案2
这是一个使用 find 的示例。
find somedir/ -type f -name 'some.zip' -exec bash -c 'name=$1; echo unzip "$name" -d "${name%/*}"; echo mv "$name" "${name%%/*}/cx_c_${name##*/}"' _ {} \;
echo
当您对结果满意时删除
或者创建一个带有本地参数的函数,并将文件名作为参数传递给该函数,如下所示:
cfind() {
local name=$1
find somedir/ -type f -name "$name" -exec bash -c 'name=$1; echo unzip "$name" -d "${name%/*}"; echo mv "$name" "${name%%/*}/cx_c_${name##*/}"' _ {} \;
}
称呼它为
cfind myfilename.zip