gpt4 book ai didi

bash - mv 不识别通配符/变量扩展

转载 作者:行者123 更新时间:2023-11-29 09:30:01 24 4
gpt4 key购买 nike

我试图将一系列目录中的所有文件移动到它们各自文件夹的子目录中。有很多文件夹需要发生这种情况,所以我把它放在一个循环中。为方便示例,我减少了数量。

read var1
case ${var1} in a) sub="sub_directory1";; b) sub="sub_directory2";; esac

for ((i=1; i<=5; i++)); do
case ${i} in
1) t=a;; 2) t=b;; 3) t=c;; 4) t=d;; 5) t=d;;
esac
mv "${location[files]}${t}/*.*" "${location[files]${t}/${sub}
done

${location[files]}${t}${sub} 都是目录,因此结构看起来类似这样:

/files/a/file1.txt
/files/a/file2.txt
/files/a/sub_directory1
/files/a/sub_directory2
/files/b/file33.txt.3824
/files/b/file52f.log.345
/files/b/sub_directory1
/files/b/sub_directory2

等等等等。这个想法是将 /files/a/ 中的文件移动到 files/a/sub_directory1

当我在脚本中运行它时,它似乎正确地扩展了变量,但显然不是 mv 的正确方式。我明白了

mv: cannot rename files/a/*.* /files/a/sub_directory1/*.*:
No such file or direbctory

当我手动执行相同的命令时:

mv /files/a/*.* /files/a/sub_directory1

它按预期工作。

是否按字面意思对待通配符?

最佳答案

双引号防止单词拆分和通配,同时允许变量扩展,即 "*.*" 只是字面上的字符串 *.*。要对文件名进行通配,您可以这样做:

mv "${location[files]}${t}"/*.* "${location[files]}${t}/${sub}"

More info on Bash manual.

关于bash - mv 不识别通配符/变量扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31438669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com