Найти все символы '&' в файлах и папках
У меня есть сервер Ubuntu с общим доступом к файлам Samba. Я хочу найти все файлы и папки, которые имеют "&" в названии, заменить его на "и". Может ли кто-нибудь помочь мне в этой ситуации. Спасибо вам всем
я использовал команду sudo find / -iname '*&' но это не сработало
2 ответа
Рекурсивно: снизу вверх
Возможно, вам нужно сделать это рекурсивно, а это значит, что вам нужно убедиться, что переименование выполняется снизу вверх. Например, если вы начнете с самого высокого уровня, все файлы и папки, перечисленные ниже, будут буквально перемещены, и их нужно будет найти снова, например:
/folder & co/some other folder/test & file.txt
->
/folder and co/some other folder/test & file.txt
Это где python"s os.walk() может помочь, работать рекурсивно, побежал с аргументом topdown=False, чтобы убедиться, что он работает снизу вверх.
По той же причине вам необходимо сначала переименовать файлы, а затем папки, как и приведенный ниже скрипт:
Сценарий
#!/usr/bin/env python3
import shutil
import os
import sys
def move(subject):
shutil.move(os.path.join(root, subject), os.path.join(root, subject.replace("&", "and")))
for root, dirs, files in os.walk(sys.argv[1], topdown=False):
for f in files:
move(f)
for d in dirs:
move(d)
Как пользоваться
- Скопируйте приведенный ниже скрипт в пустой файл и сохраните его как
move.py Запустите его с каталогом со всеми вашими файлами и папками в качестве аргумента:
python3 /path/to/move.py /path/to/directoryесли путь включает пробелы, используйте кавычки:
python3 /path/to/move.py '/path/to/directory'
Вы могли бы использовать find с -exec флаг звонить rename Команда для всех найденных файлов.
find . -type f -name "*&*" -exec rename 's/&/AND/' {} +
Вот демо:
DIR:/TESTDIR
skolodya@ubuntu:$ ls
DIR:/TESTDIR
skolodya@ubuntu:$ touch "tom&jerry" "jekyl&hide"
DIR:/TESTDIR
skolodya@ubuntu:$ find . -type f -name "*&*"
./tom&jerry
./jekyl&hide
DIR:/TESTDIR
skolodya@ubuntu:$ find . -type f -name "*&*" -exec rename 's/&/AND/' {} +
DIR:/TESTDIR
skolodya@ubuntu:$ ls
jekylANDhide tomANDjerry