Я пытаюсь удалить старые учетные записи пользователей сети с нашего лабораторного сервера (Mac OS X 10.6). Я нашел простую команду командной строки, чтобы найти пользовательские каталоги, к которым не обращались больше года:
find /Volumes/Server-HD2/NetworkUsers/Students -type d -maxdepth 1 -mindepth 1 -not -name "." -mtime +356
Выполнение этой команды успешно перечисляет все старые учетные записи. Затем я нашел то, что выглядит как простой цикл for, но он не работает:
#!/bin/bash
keep1="/Volumes/Server-HD2/NetworkUsers/Students/studenttest"
keep2="/Volumes/Server-HD2/NetworkUsers/Students/studenttest2"
USERLIST='find /Volumes/Server-HD2/NetworkUsers/Students -type d -maxdepth 1 -mindepth 1 -not -name "." -mtime +356'
for a in $USERLIST ; do
[[ "$a" == "$keep1" ]] && continue #skip account 1
[[ "$a" == "$keep2" ]] && continue #skip account 2
echo "Deleting account and home directory for" $a
dscl . delete $a #delete the account
rm -r $a #delete the home directory
done
Когда я запускаю эту команду как исполняемый файл оболочки или просто прямо в командной строке, она проходит по $ a как каждое слово в $ USERLIST. В других работах, если я просто делаю это:
USERLIST='find /Volumes/Server-HD2/NetworkUsers/Students -type d -maxdepth 1 -mindepth 1 -not -name "." -mtime +356'
for a in $USERLIST ; do
echo $a
done
Он вернется:
find
/Volumes/Server-HD2/NetworkUsers/Students
-type
d
-maxdepth
1
-mindepth
1
...
тогда как я ожидал бы, что он возвратит каждый каталог, который соответствует команде "find".
Мне нужно выяснить, как сделать массив результатов из команды find для прохождения цикла. Думаю, я просто не понимаю, как массивы и строки обрабатываются в bash. Какие-нибудь мысли?