2012-10-04 37 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 "*"` 

会显示命名字面*

相关问题