3

Вот блок кода, который у меня есть. Независимо от того, что я делаю с командой 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 ответ1

0

Заменить:

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 содержит пробелов. Если это так, то оно должно быть в двойных кавычках.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .