Горячий, чтобы удалить специальные символы из имен файлов и переименовать их в каталоге?

Это - то, что я имею до сих пор.

#!/bin/bash

pushd DirectoryName

for file in *.csv; do
    #echo $file
    filename=${file%.*}
    file_clean=${filename//[ ()$+&\.\-\'\,]/_}
    final= "$file_clean.csv"
    mv "$file" $final
done

popd
1
задан 04.11.2012, 22:05

1 ответ

Я использовал бы следующее:

#! /bin/bash
cd DirectoryName
for file in *.csv; do
    filename=${file%.*}
    file_clean=`echo $filename | tr -cs "[:alnum:]_" _ `
    final="$file_clean.csv"
    echo "mv \"$file\" \"$final\" "
done
cd ..

Единственные изменения:

1) Было пространство после = в строке final= "$file_clean.csv". Я удалил его.

2) Вместо того, чтобы использовать строковую замену управляют, чтобы я использовал tr команда. С TR, -c опция говорит для замены любого символа, который не находится в наборе. Таким образом, я могу указать символы, я хочу сохранить (буквенно-цифровой индикатор и подчеркивание, в этом случае) и все, что другие будут преобразованы.

Это должно соответствовать некоторым более специальным символам, которые трудно указать через прямую замену, такой как []\{} и ". -s опция означает, что только одно подчеркивание будет сгенерировано даже если подавление нескольких символов. Таким образом abc((((())))).csv переводит в abc_.csv вместо abc__________.csv

2
ответ дан 12.12.2019, 13:14

Теги

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