Удалить список каталогов, хранящихся в файле
У меня есть список имен каталогов по следующему пути
/home/list/list.txt
Все каталоги находятся по следующему пути
/home/directory/
Как я могу удалить каталоги, содержащиеся в списке, используя командную строку?
4 ответа
Предположим, что каталоги пусты, я бы сказал...
while IFS= read -r directory
do
#rmdir /home/directory/"$directory"
echo rmdir /home/directory/"$directory"
done < /home/list/list.txt
И как только вы увидите echo
работает так, как вы хотите, работайте, раскомментируйте rmdir
,
Это последовательно проходит через содержимое /home/list/list.txt
и сохраняет значение каждой строки в $directory
, Затем он выполняет rmdir
действие.
Обратите внимание на использование двойных кавычек для предотвращения ошибок, если имена содержат пробелы. IFS=
а также read -r
хорошо объяснены в Как я могу прочитать файл (поток данных, переменная) построчно (и / или поле за полем)?,
Если каталоги не пусты, и вы полностью уверены в том, что делаете, используйте rm -r
, Вы можете добавить -f
заставить (опять же: если вы уверены) или -v
иметь подробный вывод.
Начать с
xargs -I{} echo rm -fr /home/directory/{} </home/list/list.txt
который просто выполняет команду echo, и если все в порядке, удалите echo.
Ты в порядке с Python?
from os import system
lines = open("/home/list/list.txt", 'rb').readlines()
for i in range(0, len(lines)):
currentline = lines[i]
rmcommand = "rm -r " + currentline.strip('\n')
system(rmcommand)
Это возьмет список, разделит строки на массив, а затем выдаст команду для каждого индекса в массиве. strip
это избавиться от завершающего символа новой строки, если таковой существует.
С помощью awk
в простой однострочник
awk '{system ("rm -r /home/directory/\""$0"\"")}' /home/list/list.txt
Команда перебирает записи во входном файле и создает rm
команда через system
,