Как я могу переименовать все файлы в определенном каталоге, где файлы содержат пробелы и специальные символы ($ и @) в их именах?
Я попробовал rename
следующую команду, чтобы заменить все пробелы и специальные символы на _:
$ ls -lrt
total 464
-rwxr-xr-x. 1 pmautoamtion pmautoamtion 471106 Jul 17 13:14 Bharti Blocked TRX Report Morning$AP@20150716.csv
$ rename -n 's/ |\$|@/_/g' *
$ ls -lrt
total 464
-rwxr-xr-x. 1 pmautoamtion pmautoamtion 471106 Jul 17 13:14 Bharti Blocked TRX Report Morning$AP@20150716.csv
$
Команда работает, но не вносит никаких изменений в имена файлов и также не возвращает никаких ошибок. Как можно это исправить и есть ли другие способы?
linux
shell-script
rename
Анкит Вашиштха
источник
источник
Ответы:
-n
Флаг дляТак что это нормально, если у вас нет никаких изменений.
Что касается вашей команды, она работает для меня:
Может быть, в зависимости от вашей оболочки, вы должны избежать |
Или вы можете использовать
[…]
обозначение для группировки символов:источник
rename -n 's/./_/g' *
то выводит?Вы можете попробовать вот так:
Если вы довольны результатом, удалите
echo
перед,mv
чтобы фактически переименовать файлы.источник
В поисках красивого скрипта для удаления специальных символов, а также немецких специальных символов, заменив их универсальными, чтобы не удалять полезную информацию. Я обновил последнюю версию скрипта, в которой были некоторые незначительные проблемы, приводящие к:
в результате чего:
@don_crissti: он делает hokus-pokus с infile, поскольку у linux есть свои проблемы с обработкой специальных символов при перемещении имени файла.
источник
Поскольку
rename
команда не работает для меня по неизвестным причинам, и я не получаю никаких других ответов на свой вопрос, я сам пытался сделать возможным переименование. Возможно, это не лучший подход для переименования файлов, но это сработало для меня, и именно поэтому я хотел бы опубликовать его в качестве ответа, чтобы, если кто-то еще прочтет это, мог получить некоторую помощь в изменении имен файлов, как я это сделал.Теперь для меня, я знаю, что у всех файлов будет определенный текст в их именах, который является словом «Блок». Ниже приведены имена файлов до их переименования:
Теперь я написал небольшой сценарий оболочки, чтобы сделать это возможным. Ниже приведен код:
И это все , когда я запустить сценарий, он переименовывает все имена файлов , содержащие пробелы (
) или
$
или@
с_
вместо этих символов.источник
cat foo | sed S1 | sed S2 | sed S3 >> bar
наsed -e S1 -e S2 -e S3 foo >> bar
sed 's/[ ()@$]/_/g'
илиsed 'y/ ()@$/_____/'
Это просто удалить специальные символы из имен файлов
поставить
echo
после,; do
чтобы проверить раньше, как:Другое решение:
-n
возможность проверить раньше.источник
Я долго искал решение этой проблемы. Я работаю на старых закрытых системах, в которых не могут быть установлены новые пакеты. У меня нет
rename
команды. Наконец я написал скрипт, который работает со всеми введенными на клавиатуре специальными символами.~@#$%^&*()-_=+[]{}\|;:",<.>?'
Скрипт переименует каждый файл и каталог в текущем каталоге. Он заменит все специальные символы, за исключением-_.
с_
характером.outfile=
Линия может быть изменена , чтобы использовать другой символ для замены в случае необходимости. Заменить|_|
с ,|.|
чтобы использовать.
символ, например.источник
Для меня на Ubuntu 18.04 LTS с bash 4.4.20 (1) - выпустить эту однострочную версию, которая хорошо работала для удаления пробелов, @,: # ...
Для проверки (обратите внимание на
echo
команду:Выполнить:
источник