То, что вы делаете, проблематично, если есть файлы со странными именами, которые соответствуют вашей спецификации файлов. Если вы направите вывод find в xargs, у вас возникнет проверенная временем проблема Разбор LS
[ghoti@pc ~/tmp2]$ touch $'one\ntwo.txt' "three four.txt"
[ghoti@pc ~/tmp2]$ find . -name "*txt" -type f -print | xargs rm
rm: ./three: No such file or directory
rm: four.txt: No such file or directory
rm: ./one: No such file or directory
rm: two.txt: No such file or directory
Почему бы просто не обрабатывать rm
непосредственно в find
?
find /dir -name "filename*" -type f -exec rm {} \;
Чтобы проверить свои результаты, вы можете взять $?
:
find /dir -name "filename*" -type f -exec rm {} \;
result=$?
case "$result" in
etc, etc
(Я помещаю $?
в переменную на случай, если будет полезно повторно использовать ее позже или если другие команды должны выполняться между find
и местом, где оценивается возвращаемое значение.)
Или вы можете просто проверить успех напрямую:
if find /dir -name "filename*" -type f -exec rm {} \;
then
echo "SUCCESS!"
else
echo "FAIL!"
fi
ОБНОВЛЕНИЕ:
Согласно комментариям... Если вам не нужно рекурсивно перемещаться по подкаталогам, вероятно, достаточно цикла for.
for file in *.txt; do
if ! rm "$file"; then
echo "ERROR: failed to remove $file" >&2
fi
done
Или, если вам не нужна детализация генерации ошибок в отдельных файлах:
rm *.txt || echo "ERROR" >&2
Я не думаю, что смогу сделать его еще меньше. :-П
person
ghoti
schedule
22.08.2012
sleep 60
может быть полезной. - person Blender   schedule 21.08.2012