У меня на жестком диске музыка в ГБ, отформатированная в EXT4. Я хочу переместить эти файлы в раздел жесткого диска в формате FAT. Тем не менее, я не могу переместить большинство моих файлов, потому что они имеют «:» в именах (например, «Act 2: .....» для опер). Есть ли способ с помощью командной строки переименовать все мои файлы из «XXXX: XXXX» в «XXXX-XXXX»?
источник
find .
имя подкаталога предшествует его содержимому. Так что если у вас есть файл,/1:/2:
сначала/1:/
он будет переименован в/1-/
. Теперь вы не можете переименовать/1:/2:
в/1-/2-
потому , что/1:/2:
не существует.find . -type d -readable -writable -exec rename 's|:|-|g' {} \;
А потом файлы:find . -type f -readable -writable -exec rename 's|:|-|g' {} \;
for i in {1..20}; do find . -maxdepth $i -mindepth $i -name "*:*" -exec rename 's|:|-|g' {} \;; done
. Измените 20 на максимальную глубину реж. состав. Не должен быть точным - может быть больше. Это займет время, если установлено очень большое число, хотя.Я сейчас не на своей машине с Linux, поэтому могу дать только приблизительную информацию.
В Linux есть утилита командной строки,
rename
которая работает с другими входными данными, регулярными выражениями или регулярными выражениями. Вы должны иметь возможность использовать это вместе с регулярным выражением типа "s /: / - /" в ваших файлах для достижения желаемого переименования.Просто чтобы быть в безопасности, делайте это небольшими партиями и / или первым тестом с симуляцией (переименование имеет флаг, который просто дает вам старое имя и новое имя файла без фактического переименования - сначала используйте это для проверки)
источник
Это решение в Python, которое обрабатывает случай, когда файлы не обязательно находятся в одном каталоге.
rootdir
к самому рассматриваемому каталогу (используйте полный путь, начинающийся с /. Никаких сокращений или переменных env, таких как ~ разрешено). Не нужно ставить \ перед специальными символами - например, если самый внешний каталог - /.../Мой жесткий диск, поставьтеrootdir = "/.../My HDD"
НЕrootdir = "/.../My\ HDD"
(обратите внимание на «s») [Я говорю это явно только потому, что вы можете быть незнакомы с python. Нет неуважения предназначена.]logfile
в нужное место файла журнала. В конце концов, этот файл будет содержать список файлов, переименованных - для дальнейшего использования.python rename.py
.Предупреждение: сделайте тест на небольшом образце, прежде чем рисковать целым ГБ музыки.
Детали: переименование выполняется из самых внутренних файлов наружу.
источник
Я понимаю, что это очень старый пост. Рекурсивное решение AeroGT80 очень тщательное, но довольно медленное. Я работал около получаса на более медленном сервере, и это было сделано только наполовину - я думаю, что это было около 73 000 файлов в около 300 подкаталогах.
Приведенное ниже решение будет работать намного быстрее (оно работает со всеми файлами в каталоге, а не с каждым файлом по одному - используя нерекурсивное решение AeroGT80). Единственная проблема в том, что он уходит только в один каталог (поэтому он не является полностью рекурсивным, как его решение), но я уверен, что его можно изменить достаточно легко.
источник