![递归删除所有与所在文件夹同名的 .exe 文件](https://linux22.com/image/1377332/%E9%80%92%E5%BD%92%E5%88%A0%E9%99%A4%E6%89%80%E6%9C%89%E4%B8%8E%E6%89%80%E5%9C%A8%E6%96%87%E4%BB%B6%E5%A4%B9%E5%90%8C%E5%90%8D%E7%9A%84%20.exe%20%E6%96%87%E4%BB%B6.png)
我想删除当前文件夹和所有子文件夹中的所有.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
。