2

Я хочу удалить все .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 ответ1

3

Запустите это в 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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .