我一直在试图递归重命名文件和文件夹与iconv没有成功,文件正确地重命名,但文件夹不。如何从Bash递归重命名文件和文件夹与iconv
我用什么文件是(完美的作品):
find . -name * -depth \ -exec bash -c 'mv "$1" "${1%/*}/$(iconv -f UTF8 -t ASCII//TRANSLIT <<< ${1##*/})"' -- {} \;
我尝试了文件和文件夹(失败:只重命名文件夹):
find . -exec bash -c 'mv "$1" "$(iconv -f UTF8 -t ASCII//TRANSLIT <<< $1)"' -- {} \;
原来的问题: 我只是想批量重命名很多文件,使他们“网络友好”,认为像删除空间,怪异的字符等,目前我有
find . -name '*' -depth \
| while read f ;
do
mv -i "$f" "$(dirname "$f")/$(basename "$f"|tr -s ' ' _|tr -d "'"|tr -d ","|tr - _|tr "&" "y"|tr "@" "a")" ;
done
有没有什么办法可以在单次运行时执行上面的tr和iconv?因为我正在谈论300,000个文件重新命名,如果可能,我想避免第二次搜索。
如果需要,我正在使用Bash 4.2.24
在此先感谢。
如果你身边的perl,你也许可以使用[convmv(https://www.j3e.de/linux/ convmv /)代替(这是一个工具来转换文件名中的字符集)。 – 2012-07-17 20:28:50
只是要清楚,你交换文件和文件/文件夹命令? “-type f”会排除目录。 – chepner 2012-07-17 20:42:47
@chepner ups,我不好,我尝试了不同的设置。没有“-type f”,只有文件夹被重命名,但没有文件。 – nxgtrturbo 2012-07-17 20:52:22