根据源路径复制时更改文件名

根据源路径复制时更改文件名

我在该格式的目录中有大量文件*/*/*/*/*.txt,我想将它们复制到不同的位置,同时用下划线替换路径中的正斜杠。例如,如果一个文件位于A/B/C/D/E.txt,我想将其复制到 ,dest/以便复制后其路径为dest/A_B_C_D_E.txt。这可能吗?

答案1

您可以使用这样的脚本:

for i in `find . -type f -name "*.txt"`
do
newfile=$(echo $i|sed -s 's@/@_@g'|cut -c -3)
mv "$i" "dest/$newfile"
done

如果文件数量非常大,您可以尝试while使用for

while read i
do 
    newfile=$(echo $i|sed -s 's@/@_@g'|cut -c -3)
    mv "$i" "dest/$newfile"
done < (find . -type f -name "*.txt")

PS 请注意文件名中包含非标准符号的文件名/目录。供参考检查这个问题和答案

相关内容