Изменение имен файлов, содержащих специальные символы в bash

#python #bash #perl #batch-rename

#python #bash #perl #пакетное переименование

Вопрос:

Мы запускаем сервер Ubuntu, который автоматически передает файлы FTPs от клиента, и в последнее время эти файлы отображаются как … ‘file.csv;’ ‘file2.csv;

Я безуспешно пытался сформулировать решения bash и Python, но безуспешно. Я просто пытаюсь убрать одинарные кавычки и точки с запятой и сохранить то, что осталось. Это не обязательно должен быть bash, это может быть python или даже perl. Я включил ниже код того, что не работает. Кажется, я даже не могу получить список каталогов. Кто-нибудь может указать мне правильное направление?

 for i in '* 
    do
    echo $i
done
  

Примечание: исправлен код для удаления ошибочного $echo’

Комментарии:

1. используйте shellcheck.net . Если вы вставляете свой код с правильным шаблоном, он сообщает вам, что вы пытаетесь использовать echo в качестве переменной, которая, вероятно, не нужна вам.

Ответ №1:

Используйте find ... -exec rename примерно так:

 find . -name "*[;']*" -exec rename "tr/';//d" {} ;
  

Пример:

 # Create example input files:
$ touch "f'o''o'" "b;a;;r;" "b';a;'';z;'"

# Build the command by first confirming that `find` finds them all:
$ find . -name "*[;']*"                            
./f'o''o'
./b';a;'';z;'
./b;a;;r;

# Find and rename them, one by one:
$ find . -name "*[;']*" -exec rename "tr/';//d" {} ;

# Confirm that rename worked as expected:
$ ls -1rt | tail -n 3                                
foo
bar
baz
  

Вы также можете выполнить массовое переименование для ускорения использования xargs , например

 find ... -print0 | xargs -0 ...
  

но в вашем случае я предполагаю, что переименование файлов один за другим происходит достаточно быстро.


Утилита командной строки rename доступна во многих вариантах. Большинство из них должны работать для этой задачи. Я использовал rename версию 1.601 Аристотеля Пагалциса. Для установки rename просто загрузите его Perl-скрипт и поместите в $PATH . Или установите rename с помощью conda , например, так:

 conda install rename
  

Комментарии:

1. вы можете переименовать их, а затем выполнить задание google.com/amp/s/www.geeksforgeeks.org /…

Ответ №2:

Вы можете начать с использования этого скрипта pyhon 3. Однако я тестировал это только в Windows.

 import os

folder = ""
for root, dirs, files in os.walk(folder, topdown=False):
    for fn in files:
        path_to_file = os.path.join(root, fn)
        if "'" in fn or ";" in fn:
            print('Removing special characters from file: '   fn)
            new_name = fn.replace("'", '').replace(";", '') 
            os.rename(path_to_file, os.path.join(root, new_name))
  

Ответ №3:

 import os
filesInDirectory = os.listdir(Path)

for filename in filesInDirectory:
    if "'" in filename:
        filename.replace("'", "")
    elif ";" in filename:
        filename.replace(";", "") 
    elif ("'" and ";") in filename:
        filename.replace("'", "")
        filename.replace(";", "")
  

Использование Python