我想删除当前文件夹和所有子文件夹中的所有.exe文件。
我读到find . -name "*.exe" -exec rm -f '{}' \;
可以这样做,但我只想在容器文件夹与.exe 同名时才执行删除。
例子:
/me/folder1/folder1.exe - delete folder1.exe
/me/folder 2/folder 2.exe - delete 'folder 2.exe'
/me/folder3/otherexe.exe - do not delete otherexe.exe
答案1
在 Bash 中运行此程序。它遍历所有.exe
文件并将父目录名称与文件名(不带扩展名)进行比较。
shopt -s extglob
for f in **/*.exe; do
dir="$(basename "$(dirname "$f")")" # get dirname
file="$(basename "${f%.*}")" # get filename, without extension
if [ "$dir" = "$file" ]; then
rm -i -- "$f"
fi
done
获取原始目录名称的技巧是调用文件的。但是,所有替换都需要用引号basename
引起dirname
来,以使此命令适用于包含空格的文件名。
如果您不想在删除文件之前得到提示,请删除-i
该调用的选项rm
。