2017-05-28 75 views
1

我一直在研究此腳本以從我的目錄中的所有文件夾中檢索文件並嘗試將其名稱更改爲我所需的輸出。

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

文件名後: haircurly1.dds

我與超過12000個紋理與我從歸檔中提取不同名稱的工作。我的提取器包括文件夾的路徑,它在每個文件名中提取文件。例如,應該命名爲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

我用打印$NF;和它的AWK分隔符後向我發送文本:

\ haircurly1.dds

我想每一個文件名這個腳本會一直運行到awk命令的$ NF輸出。任何人都知道我可以如何讓我的腳本將文件名更改爲$NF輸出?

謝謝

+0

你可以添加一個清晰的文件名前後的例子嗎? – 123

+0

爲清晰起見進行了編輯。 之前文件名:文件夾\演員\字符\頭髮\ haircurly1.dds 後文件名:haircurly1.dds –

+0

他們都在文件夾下面直接?嘗試'爲我in * \\ *;做回聲「$我」「$ {i ## * \\}」;完成'?如果文件名看起來沒問題,請將'echo'更改爲'mv'。 – 123

回答

-2

讓你的awk命令格式和打印「MV」命令,管結果打壞。額外的單引號確保bash將反斜槓視爲普通字符。

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

心連心

+0

這用於更改文件名稱,但它將所有內容都移動到當前目錄之外的原始文件夾中。 –

+0

@DevinWalker這正是你的問題所暗示的 - 它說你想將名字從'X/Y/Z/haircut.dds'改成'haircut.dds',根據定義,它指的是當前目錄,因爲沒有指定其他目錄。 –

+0

@MarkSetchell他們在問題中是反斜槓。 – 123

0

你的問題還不清楚,但它聽起來像所有你想做的事就是:

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

如果這不是你想要的,然後編輯你的問題,以澄清您的要求。