2015-10-09 2 views
0

hadoop fs -ls $ {DIRECTORY} | sort -k 6 | head -n -120 | awk '{if ($ 5 == 0) print $ 8}' | xargs hadoop fs -rm

Я пытаюсь перечислить файлы в каталоге, отсортировать их по отметке времени, пропустить последние 120 файлов и удалить ненулевые файлы в остальном. Есть ли способ, по которому я могу пропустить часть fo -rm hadoop, когда нет файлов с нулевым байтом?Выполнение команды по трубопроводу при выполнении условия

Или можно выполнить ту же реализацию с использованием метки времени (удаление файлов с нулевым байтом, которые создаются за 30 минут до последнего файла).

+0

Почему вы хотите, чтобы пропустить его? Если это связано с тем, что оно создает ошибку, вы можете либо перенаправить ошибки в/dev/null, либо создать пустой, старый, пустой файл перед запуском (используя 'touch'). –

ответ

0

Вы можете запустить это в цикле:

for file in `hadoop fs -ls ${DIRECTORY} | sort -k 6 | head -n -120 | awk '{ if ($5 == 0) print $8 }'`; do hadoop fs -rm $file; done 

Или, может быть, это выглядит лучше:

files=`hadoop fs -ls ${DIRECTORY} | sort -k 6 | head -n -120 | awk '{ if ($5 == 0) print $8 }'` 
if [ "$files" != "" ]; then echo "$files" |xargs hadoop fs -rm; fi 
Смежные вопросы