递归删除所有与所在文件夹同名的 .exe 文件

递归删除所有与所在文件夹同名的 .exe 文件

我想删除当前文件夹和所有子文件夹中的所有.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

相关内容