найдите весь '&' символами в файлах и папках

у меня есть сервер Ubuntu с совместным доступом к файлам самбы. я хочу найти все файлы и папки, которые имеют '&' на их имя замена это с 'и'. может любой помогать мне на этой ситуации. спасибо всем
я использовал команду sudo find / -iname '*&' но это не работало

0
задан 24 January 2016 в 22:49

2 ответа

Вы могли использовать 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
0
ответ дан 26 July 2019 в 09:01

Рекурсивно: от нижней части до вершины

Вероятно, необходимо сделать это рекурсивно, что означает, что необходимо удостовериться, что переименовывание сделано от нижней части до вершины. Если бы Вы запустили бы на высшем уровне, например, всех файлах и папках ниже, были бы буквально перемещены и должны будете быть найдены снова, например:

/folder & co/some other folder/test & file.txt

->

/folder and co/some other folder/test & file.txt

Это то, где python 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)  

Как использовать

  1. Скопируйте сценарий ниже в пустой файл, сохраните его как move.py
  2. Выполните его с каталогом со всеми Вашими файлами и папками как аргумент:

    python3 /path/to/move.py /path/to/directory
    
  3. если путь включает пробелы, используйте кавычки:

    python3 /path/to/move.py '/path/to/directory'
    
1
ответ дан 26 July 2019 в 09:01

Другие вопросы по тегам:

Похожие вопросы: