Как переименовать все файлы со специальными символами и пробелами в каталоге?

  1. Если вы знаете root пароль (и он установлен), вы можете использовать su , чтобы стать root и отредактировать / etc / sudoers .
  2. Если ваша корневая файловая система находится на SD-карте, вы можете извлечь ее и отредактировать / etc / sudoers на ПК или любом другом устройстве, при условии, что на нем есть кардридер.
  3. Вы можете войти в командную строку U-Boot (загрузчика) (обычно нажав кнопку на клавиатуре или через UART) и добавить 1 в командную строку ядра Linux, чтобы войти в однопользовательский режим.В этом режиме вы будете root и сможете редактировать / etc / sudoers . См. Также и .
9
17.07.2015, 10:57
4 ответа

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

#!/bin/bash

for file in ./*
do
  infile=`echo "${file:2}"|sed  \
         -e 's|"\"|"\\"|g' \
         -e 's| |\ |g' -e 's|!|\!|g' \
         -e 's|@|\@|g' -e 's|*|\*|g' \
         -e 's|&|\&|g' -e 's|]|\]|g' \
         -e 's|}|\}|g' -e 's|"|\"|g' \
         -e 's|,|\,|g' -e 's|?|\?|g' \
         -e 's|=|\=|g'  `
  outfileNOSPECIALS=`echo "${file:2}"|sed -e 's|[^A-Za-z0-9._-]|_|g'`
  outfileNOoe=`echo $outfileNOSPECIALS| sed -e 's|ö|oe|g'`
  outfileNOae=`echo $outfileNOoe| sed -e 's|ä|ae|g'`
  outfileNOue=`echo $outfileNOae| sed -e 's|ü|ue|g'`
  outfileNOOE=`echo $outfileNOue| sed -e 's|Ö|OE|g'`
  outfileNOAE=`echo $outfileNOOE| sed -e 's|Ä|AE|g'`
  outfileNOUE=`echo $outfileNOAE| sed -e 's|Ü|UE|g'`
  outfileNOss=`echo $outfileNOUE| sed -e 's|ß|ss|g'`
  outfile=${outfileNOss}
  if [ "$infile" != "${outfile}" ]
  then
        echo "filename changed for " $infile " in " $outfile
        mv "$infile" ${outfile}
  fi
done

exit

в результате:

enter image description here

@don_crissti: Он делает хокус-покус с infile, так как у linux будут собственные проблемы с обработкой специальных символов при перемещении имени файла.

1
27.01.2020, 20:06

Я долго искал решение этой проблемы. Я работаю на старых закрытых системах, в которых нельзя установить новые пакеты. У меня нет команды rename. Наконец, я написал скрипт, который работает со всеми специальными символами, введенными с клавиатуры. ~@#$%^&*()-_=+[]{}\|;:",<.>?'Сценарий переименует каждый файл и каталог в текущем каталоге. Он заменит все специальные символы, кроме -_., на символ _. Строку outfile=можно изменить, чтобы использовать другой символ для замены, если это необходимо. Замените |_|на |.|, чтобы использовать, например, символ ..

#!/bin/bash

for file in./*
do
  infile=`echo "${file:2}"|sed  \
         -e 's|"\"|"\\"|g' \
         -e 's| |\ |g' -e 's|!|\!|g' \
         -e 's|@|\@|g' -e 's|*|\*|g' \
         -e 's|&|\&|g' -e 's|]|\]|g' \
         -e 's|}|\}|g' -e 's|"|\"|g' \
         -e 's|,|\,|g' -e 's|?|\?|g' \
         -e 's|=|\=|g'  `
  outfile=`echo "${file:2}"|sed -e 's|[^A-Za-z0-9._-]|_|g'`
  mv "$infile" ${outfile} &
done

exit
1
27.01.2020, 20:06

Этот просто удаляет специальные символы из имен файлов

for file in *; do mv "$file" `echo $file | tr -cd '.A-Za-z0-9_-'` ; done
ॐNámásté Egész-ség.mkv --> NmstEgsz-sg.mkv

поставить echoпосле ; doдля проверки до, например:

for file in *; do echo mv "$file" `echo $file | tr -cd '.A-Za-z0-9_-'` ; done

Другое решение:

rename -v 's/[^a-zA-Z0-9\.\s_-]//g' *.* && rename -v 's/[\s]/_/g' *.*
ॐNámásté Egész-ség.mkv --> Nmst_Egsz-sg.mkv

-nвариант для проверки перед.

1
27.01.2020, 20:06

Для меня в Ubuntu 18.04 LTS с bash 4.4.20 (1 )-релиз этот -лайнер хорошо работал для удаления пробелов, @,:#...

Для проверки (обратите внимание на команду echo:

for file in./* ; do if [[ $file == *['!'\ :@#]* ]]; then echo mv "$file" "${file//[ #()@$:]/_}"; fi; done

Выполнить:

for file in./* ; do if [[ $file == *['!'\ :@#]* ]]; then echo mv "$file" "${file//[ #()@$:]/_}"; fi; done
0
14.02.2020, 10:51

Теги

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