尝试创建一个 shell 脚本,将所有名称中带有特定年份的文件移动到基​​于年份的目录中

尝试创建一个 shell 脚本,将所有名称中带有特定年份的文件移动到基​​于年份的目录中

这是我目前拥有的代码块。无论我使用 find 命令做什么,我似乎都无法让它按我想要的方式运行。尝试将所有带有这些长年份名称的文件移动到它们自己的命名目录中。

for i in 2008 2009 2010 2011
do
mkdir /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i
find /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/ -iname '*$i*' -maxdepth 1  -type f  -exec mv -n {} /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i/ \;
done

答案1

代替:

find /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/ -iname '*$i*' -maxdepth 1  -type f  -exec mv -n {} /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i/ \;

和:

find /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/ -maxdepth 1 -iname "*$i*" -type f  -exec mv -n {} /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i/ \;

问题是$i在单引号内不会扩展。因此,使用"*$i*"代替'*$i*'

此外,find最好-maxdepth在测试(例如)之前指定选项(例如)-iname。在上面的代码中,顺序已相应更改。

最后,在两个地方您使用...Test/$i不带引号的引号。这只在这里有效,因为$i不包含空格。如果包含空格,则应使用双引号。

相关内容