Mac Terminal Bash awk将多个文件名更改为$ NF输出

时间:2017-05-28 21:30:41

标签: bash macos awk terminal

我一直在处理这个脚本,从我目录中的所有文件夹中检索文件,并尝试将其名称更改为我想要的输出。

在文件名之前: Folder\actors\character\hair\haircurly1.dds

文件名后: haircurly1.dds

我正在处理超过12,000个纹理,这些纹理具有我从存档中提取的不同名称。我的提取器包括文件夹的路径,它提取每个文件名中的文件。例如,应该在提取期间将名为haircurly1.dds的文件命名为Folder\actors\character\hair\haircurly1.dds

cd ~/Desktop/MainFolder/Folder

find . -name '*\\*.dds' | awk -F\\ '{ print; print $NF; }'

此代码检索我正在查看包含反斜杠的每个纹理文件(因为我已经使用其他代码更改了一些文件,但是我想要一次更改所有文件而不是我必须编写特定文件12,000个纹理文件的每个文件夹的代码)

我用print;它向我发送文件路径:

./Folder\actors\character\hair\haircurly1.dds

我使用print $NF;并在awk分隔符之后向我发送文本:

\ haircurly1.dds

我希望将此脚本运行的每个文件名更改为awk命令的$ NF输出。任何人都知道如何让我的脚本将文件名更改为$NF输出?

谢谢

2 个答案:

答案 0 :(得分:0)

你的问题不明确但是你想要做的就是:

for file in *\\*; do
    mv -- "$file" "${file##*\\}"
done

如果这不是您想要的所有内容,请编辑您的问题以澄清您的要求。

答案 1 :(得分:-2)

拥有你的awk命令格式并打印一个" mv"命令,并将结果传递给bash。额外的单引号确保bash将反斜杠视为普通字符。

find . -name '*\\*.dds' | awk -F\\ '{print "mv '\''" $0 "'\'' " $NF}' | bash -x

HTH