mv:无法统计错误:没有此类文件或目录错误

时间:2012-10-04 14:39:59

标签: linux bash stat

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

4 个答案:

答案 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 *

的所有文件