我需要将目录的文件移动到另一个目录。我使用以下程序时出现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'文件。 –