2011-05-21 62 views
2

我得到這個錯誤:發現:路徑必須先表達

「發現:路徑必須先表達

使用方法:找到[-H] [-L] [-P] [路徑.. ] [表達]」

對於這個代碼我公司生產的:

for subdir in `find ./$file/ -name "*[email protected]"` 
do 
new_ext=`echo $subdir | sed "s/\(.*\.\)$/\1$new/"` 
mv $subfile $new_ext 
done 

我嘗試用上面的代碼做的是重命名文件在當前和子目錄的擴展,而無需輸入舊文件擴展名。

任何幫助指出我做錯了什麼將不勝感激。

+0

[重命名文件擴展名而沒有指定]的可能重複(http://stackoverflow.com/questions/6068733/renaming-a-file-extension-without-specifying) – Johnsyweb 2011-05-24 01:47:15

回答

1

"*[email protected]"肯定不會做你想要的。構建命令in an array

+0

我想我應該只是它命名爲作爲「$ @」?我讀了你與我的聯繫。謝謝。 – 2011-05-21 16:02:42

+0

不需要。你仍然需要多個'-name'謂詞(和'-o',如果你想讓它正常工作)。 – 2011-05-21 16:03:19

2

這裏是我的嘗試:

for old_extension in "[email protected]" 
do 
    find ./$file -name "*.$old_extension" | while read old_file 
    do 
     new_file=${old_file%$old_extension}new 
     echo mv "$old_file" "$new_file" 
    done 
done 
  • find命令的輸出由while循環讀取,每次一行,每行分配給變量$ old_file
  • 的$ {old_file%$ old_extension}構造刪除擴展名,然後新擴展名'new'被追加到$ new_file
  • 回顯mv ...行將輸出到屏幕用於可視驗證
  • 一旦你滿意的結果,你可以刪除回聲並再次運行腳本真正做到這一點。記住:請在刪除回聲之前檢查結果。
  • 請注意,我已經測試了我的解決方案,針對帶和不帶嵌入空格的文件。
+1

是的,原始代碼由於各種原因是可怕的。但是你完全錯過了* find命令不起作用的地步*。 – 2011-05-22 02:51:12

+0

@Ignacio:我編輯了代碼以考慮多個擴展。 find命令現在應該可以工作,假設Teeth先生爲* file *變量設置了值。 – 2011-05-22 02:55:21