У меня есть список названий каталогов в следующем пути
/home/list/list.txt
Каталоги - все в следующем пути
/home/directory/
Как я могу удалить каталоги, содержавшиеся в списке с помощью командной строки?
Предположим, каталоги пусты, сказал бы я...
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
, который просто эхо команда, чтобы сделать, и если хорошо удаляют эхо.
Вы хорошо с 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
.