4

我需要将一个目录的文件移动到另一个目录。使用以下程序时出现统计错误。

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

4 回答 4

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

希望这可以帮助!

于 2013-02-13T10:02:42.860 回答
3
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
于 2012-10-04T14:48:11.977 回答
0

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

我在ls dir1/*.txt_dir;做

于 2020-01-05T16:48:06.703 回答
-1

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

`ls *`

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

`ls "*"`

将显示所有名为 * 的文件

于 2014-08-27T13:06:52.460 回答