我需要將目錄的文件移動到另一個目錄。我使用以下程序時出現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
我需要將目錄的文件移動到另一個目錄。我使用以下程序時出現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
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
非常感謝您的回答。其實有$ i /中的文本文件。但同樣的錯誤。 – charlie
正常情況下,這不符合任何一個文件名水珠擴大,它仍然保持不變。因此,你會得到這樣的結果:
$ 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
希望這有助於!
雖然它沒有在你的例子中顯示 - 使用正確的引號很重要。 BASH中的 「*」評估爲*,'*'評估爲擴展glob。 所以
`ls *`
將顯示所有文件目錄和
`ls "*"`
會顯示命名字面*
所有文件似乎是不言自明的。 'dir1/aa7.txt_dir'中沒有'* .txt'文件。 –