2012-10-04 61 views
2

我需要將目錄的文件移動到另一個目錄。我使用以下程序時出現stat錯誤。mv:不能統計錯誤:沒有這樣的文件或目錄錯誤

for i in dir1/*.txt_dir; do 
mv $i/*.txt dir2/`basename $i`.txt 
done 

錯誤信息

mv: cannot stat `dir1/aa7.txt_dir/*.txt': No such file or directory 
+3

所有文件似乎是不言自明的。 'dir1/aa7.txt_dir'中沒有'* .txt'文件。 –

回答

3
mv $i/*.txt dir2/`basename $i`.txt 

當有$i/沒有文本文件,這是行不通的。殼將原始字符串"$i/*.txt"傳遞給mv,其中未展開*,其中mv扼殺。

嘗試這樣:

for i in dir1/*.txt_dir; do 
    find $i -name '*.txt' -exec mv {} dir2/`basename $i`.txt \; 
done 
+0

非常感謝您的回答。其實有$ i /中的文本文件。但同樣的錯誤。 – charlie

6

正常情況下,這不符合任何一個文件名水珠擴大,它仍然保持不變。因此,你會得到這樣的結果:

$ RM .bak的 RM:不能刪除`名.bak「:沒有這樣的文件或目錄

爲了避免這種情況,我們需要改變變了nullglob的默認值。

#BASH 

    shopt -s nullglob 

    for i in dir1/*.txt_dir; do 
     mv $i/*.txt dir2/'basename $i'.txt 
    done 

瞭解更多關於在這裏:​​http://mywiki.wooledge.org/NullGlob

希望這有助於!

-1

雖然它沒有在你的例子中顯示 - 使用正確的引號很重要。 BASH中的 「*」評估爲*,'*'評估爲擴展glob。 所以

`ls *` 

將顯示所有文件目錄和

`ls "*"` 

會顯示命名字面*

相關問題