我需要将目录的文件移动到另一个目录。当我使用以下程序时出现stat错误。
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
答案 0 :(得分:6)
通常,当扩展与任何文件名不匹配的glob时,它将保持不变。因此,您得到如下结果:
$ 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 :(得分:3)
mv $i/*.txt dir2/`basename $i`.txt
$i/
中没有文本文件时,这不起作用。 shell将原始字符串"$i/*.txt"
传递给mv
,其中包含未展开的*
mv
。{/ p>
尝试这样的事情:
for i in dir1/*.txt_dir; do
find $i -name '*.txt' -exec mv {} dir2/`basename $i`.txt \;
done
答案 2 :(得分:0)
当单独放置directory / *进行迭代时,它将列出具有绝对路径的每个文件。使用`ls
对于ls dir1/*.txt_dir
中的i;做
答案 3 :(得分:-1)
虽然未在您的示例中显示 - 使用正确的引号很重要。 在BASH" *"评估为*和' *'评估扩展glob。 所以
`ls *`
将显示目录中的所有文件和
`ls "*"`
将显示名为literal *
的所有文件