这是我目前拥有的代码块。无论我使用 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
不包含空格。如果包含空格,则应使用双引号。