Удаление директорий интерактивно с помощью xargs

Нахождение всех каталогов с гигабайтами занимаемого пространства. Извлечение имени каталога из xargs и затем снова xargs для их удаления.

du -d2 -h ~/Downloads/ | grep -E '[0-9]G' | xargs -I{} sh -c "echo {} | cut -d' ' -f2"  | xargs rm -ri

Я хотел бы интерактивно удалить каталог, но у меня нет возможности в bash ввести опцию.

0
21.06.2017, 15:21
2 ответа

Вы не можете интерактивно отвечать на вопросы rm -riс помощью последней команды xargs: объяснение здесь.

Вместо этого вы можете указать список больших каталогов в качестве аргументов для rm -ri:

rm -ri $(du -d2 -h ~/Downloads/* | grep -E '[0-9]G' | xargs -I{} sh -c "echo {} | cut -d' ' -f2")

Обратите внимание, что вы можете заменить xargs cutна awk. ] как таковой:

rm -ri $(du -d2 -h ~/Downloads/* | grep -E '[0-9]G' | awk '{print $2}')

Или даже короче:

rm -ri $(du -d2 -h ~/Downloads/* | awk '$1 ~ /G$/ {print $2}')

Также обратите внимание, что приведенные выше команды не будут работать, если в именах файлов есть пробелы.

0
28.01.2020, 04:44

Похоже, что существует метод интерактивного удаления каталогов с помощью xargs. Прочитав справочные страницы, я сам нашел решение.

Параметр -p вместе с параметром -n 1 решает проблему.

du -d2 -h ~/Downloads/* | grep -E '[0-9]G' | xargs -I{} sh -c "echo {} | cut -d' ' -f2"  | xargs -p -n1 rm -r
0
28.01.2020, 04:44

Теги

Похожие вопросы