【问题标题】:mv: cannot stat error : No such file or directory errormv:无法统计错误:没有这样的文件或目录错误
【发布时间】:2012-10-04 14:39:58
【问题描述】:

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

【问题讨论】:

  • 似乎不言自明。 dir1/aa7.txt_dir 中没有 *.txt 文件。

标签: linux bash stat


【解决方案1】:

通常,当扩展一个不匹配任何文件名的 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

希望这会有所帮助!

【讨论】:

    【解决方案2】:
    mv $i/*.txt  dir2/`basename $i`.txt
    

    $i/ 中没有文本文件时,这不起作用。 shell 将原始字符串"$i/*.txt" 传递给mv,其中包含未扩展的*mv 阻塞。

    试试这样的:

    for i in dir1/*.txt_dir; do
        find $i -name '*.txt' -exec mv {} dir2/`basename $i`.txt \;
    done
    

    【讨论】:

    • 非常感谢您的回答。实际上在 $i/ 中有文本文件。但仍然是同样的错误。
    【解决方案3】:

    当您将 directory/* 单独放入迭代时,它会列出每个文件的绝对路径。使用`ls

    对于我在ls dir1/*.txt_dir ;做

    【讨论】:

      【解决方案4】:

      虽然您的示例中没有显示 - 使用正确的引号很重要。 在 BASH 中,"*" 计算为 * 并且 '*' 计算为扩展 glob。 所以

      `ls *`
      

      将显示目录中的所有文件和

      `ls "*"`
      

      将显示所有命名为 * 的文件

      【讨论】:

        猜你喜欢
        • 2018-02-10
        • 1970-01-01
        • 1970-01-01
        • 2021-07-10
        • 1970-01-01
        • 1970-01-01
        • 2016-04-28
        • 2022-09-30
        • 2016-07-20
        相关资源
        最近更新 更多