我需要将一个目录的文件移动到另一个目录。使用以下程序时出现统计错误。
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 .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
希望这可以帮助!
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
当您将 directory/* 单独放入迭代时,它会列出每个文件的绝对路径。使用`ls
我在ls dir1/*.txt_dir
;做
虽然您的示例中没有显示 - 使用正确的引号很重要。在 BASH 中,"*" 计算为 * 并且 '*' 计算为扩展 glob。所以
`ls *`
将显示目录中的所有文件和
`ls "*"`
将显示所有名为 * 的文件