我需要将目录中的文件移动到另一个目录。使用以下程序时,我收到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
通常,当扩展一个不匹配任何文件名的glob时,它保持不变。因此,您将获得如下结果:
$ rm 。bakrm:无法删除`。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
希望这会有所帮助!
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
当单独放置目录/ *进行迭代时,它将列出每个文件的绝对路径。使用`ls
对于ls dir1/*.txt_dir
中的i;做
尽管在您的示例中未显示-使用正确的引号很重要。在BASH中,“ *”计算为*,“ *”计算为扩展球。所以
`ls *`
将显示目录中的所有文件和
`ls "*"`
将显示所有名为文字的文件*