root
пароль (и он установлен), вы можете использовать su
, чтобы стать root
и отредактировать / etc / sudoers
. / etc / sudoers
на ПК или любом другом устройстве, при условии, что на нем есть кардридер. 1
в командную строку ядра Linux, чтобы войти в однопользовательский режим.В этом режиме вы будете root
и сможете редактировать / etc / sudoers
. См. Также и . ищет красивый сценарий для удаления специальных символов, а также немецких специальных символов, заменяя их универсальными, чтобы не удалять полезную информацию. Я обновил последнюю версию сценария, в которой были некоторые незначительные проблемы, приведшие к:
#!/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
в результате:
@don_crissti: Он делает хокус-покус с infile, так как у linux будут собственные проблемы с обработкой специальных символов при перемещении имени файла.
Я долго искал решение этой проблемы. Я работаю на старых закрытых системах, в которых нельзя установить новые пакеты. У меня нет команды 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
Этот просто удаляет специальные символы из имен файлов
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
вариант для проверки перед.
Для меня в 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