2017-03-16 36 views
0

我需要創建一個腳本,該腳本將通過並將多個下劃線添加到多個目錄中的所有文件,而忽略已有前綴的文件。例如,_file1, _file2, file3, file4需要看起來像_file1, _file2, _file3, _file4在Unix中向某些文件名添加前綴

我對Unix腳本知之甚少,所以一個簡單的解釋將不勝感激!

回答

0

從最好猛砸資源在那裏:

  1. 創建glob相匹配的所有相關文件。
  2. Loop通過所有匹配的文件。
    1. Remove從文件名下劃線並將結果保存到變量。
    2. 向變量添加下劃線。
    3. echo原始文件名後跟使用正確的quotes更改的文件名檢查它們看起來是否理智(由於它們是語法,因此不會打印引號echo)。
    4. 使用mv而不是echo來實際重命名文件。

另外:

  • 如果您mv支持-n/​​,用它來避免的情況下,數據丟失的可能性,你陷入困境
1

你可以使用一個班輪是這樣的:

find dir_with_files -regextype posix-extended -type f -regex '^.*\/[^_][^\/]*$' -exec rename -v 's/^(.*\/)([^_][^\/]*)$/$1_$2/' '{}' \; 

其中dir_with_files是搜索文件的上層目錄。然後它找到名稱不是從_開始的文件,並且每個文件都被重命名。

在進行任何更改之前,您可以使用帶有params -n -v的重命名來向您顯示將執行的操作,而不實際執行它們。

find dir_with_files -regextype posix-extended -type f -regex '^.*\/[^_][^\/]*$' -exec rename -v -n 's/^(.*\/)([^_][^\/]*)$/$1_$2/' '{}' \; 
+0

@michaeljay如果我的解決方案有效,請認爲它是正確的解決方案。 – Kamil