1

У меня есть несколько каталогов, каждый из которых содержит один * .txt файл (и другие файлы не * .txt).

Я бы хотел рекурсивно переименовывать эти файлы из командной строки, в основном * .txt в info.txt. Поэтому все * .txt файлы должны быть переименованы в info.txt. В каждом каталоге всегда есть только один файл .txt.

Я рассматривал несколько вопросов здесь (и в других местах), которые кажутся похожими, но либо они фокусируются на изменении расширения, либо не работают рекурсивно, ...

Любая помощь будет очень высоко ценится. Платформа: Linux или MacOSX.

3 ответа3

3
find ~/dir -type f -name "*.txt" -not -name "info.txt" \
           -execdir mv -v {} info.txt \;

В качестве альтернативы:

find ~/dir -type f -name "*.txt" -not -name "info.txt" \
| while read -r file; do
    mv "$file" "${file%/*}/info.txt"
done
1

Вы также можете использовать утилиту rename из Ubuntu, которая принимает выражение Perl для изменения имен файлов.

find . -iname "*.txt" | rename "s/[^\/]+\.txt$/info.txt/"
0

Ответ grawity - самый быстрый и, возможно, более "правильный", но есть также некоторые инструменты на основе графического интерфейса, которые могут выполнять задачи переименования файлов с простым интерфейсом и поддержкой регулярных выражений: Krename (на основе KDE), GPRename и pyRenamer (Gnome база).

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