Как заменить специальные символы в имени файла символом подчеркивания, используя Unix? - PullRequest
0 голосов
/ 13 марта 2020

Я работаю над задачей, в которой мне нужно заменить специальные символы в имени файла на _ во всех рекурсивных папках в unix / Python.

PFB код Unix.

#!/bin/sh
 # Shell script to find out all the files under a directory and
 #its subdirectories. This also takes into consideration those files
 #or directories which have spaces or newlines in their names

DIR="."

function list_files()
{
 if !(test -d "$1")
 then echo $1; return;
fi

function rename_files()
{
    str="$1"

    regex="[0-9a-zA-Z]._+"
    if [[ ! "$str" =~ ^[0-9a-zA-Z]+$ ]]
    then
       echo $1
    else
       echo "f you"
    fi
}

cd "$1"
# echo; echo `pwd`:; #Display Directory name

 for i in *
 do
 if test -d "$i" #if dictionary
 then
 list_files "$i" #recursively list files
cd ..
 else
 # echo "$i"; #Display File name
 rename_files "$i"
fi

 done
}

Может ли кто-нибудь помочь мне с кодом заменить символы в имени файла на _?

Например, если имя файла ABC $ XYZ * PQR.xls, оно должно переименовать в ABC_XYZ_PQR.xls.

Этот процесс должен быть выполнен для всех файлов в папках и вложенной папке.

Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 14 марта 2020
:>echo 'ABC$XYZ*PQR.xls' | sed 's#[^[:alnum:]|\.]#_#g' 
ABC_XYZ_PQR.xls
:>
0 голосов
/ 13 марта 2020

В подвыражении в скобках регулярного выражения каретка ("^") действует как отрицание, то есть не символы в скобках. Например, тогда как

echo 'ABC$XYZ*PQR.xls' | sed 's/[0-9a-zA-Z._]/_/g'

даст "___$___*_______", следующий код

echo 'ABC$XYZ*PQR.xls' | sed 's/[^0-9a-zA-Z._]/_/g'

даст "ABC_XYZ_PQR.xls". Вы можете изменить последний код для использования в вашей функции rename_files().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...