如何从文件名中删除特殊字符并在目录中重命名它们?

如何从文件名中删除特殊字符并在目录中重命名它们?

这是我目前所拥有的。

#!/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

我将使用以下内容:

#! /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

相关内容