Видаліть каталоги з файлу зі списком каталогів


2

У мене є список каталогів у текстовому файлі, і кожен з них потрібно видалити. Як я можу прочитати в цьому списку команду ( rm -rабо rmdir)?

Відповіді:


4

"Більш правильним" рішенням було б таке:

xargs -I{} rm -r {} < files

Це викликає rm -r, де {}замінюється ім'я файлу.


Чому? Передача файлів з пробілами xargsпризведе до помилкових аргументів. Скажімо, ваш список файлів виглядає приблизно так:

/path/to/file 1
/path/to/file_2

Потім xargs rm -r < list.txtбуде спробувати видалити /path/to/file, 1і /path/to/file_2. Однозначно не те, що ти хочеш. Завжди бути в курсі пробілів у шляхах під час передачі з команд UNIX / Linux та до них.


Що -I{}тут роблять? Документи кажуть "замінити рядок". Також, чи працює це, якщо шляхи файлів зі списку видалення мають у них пробіли?
chovy

Назва файлу занадто довга
chovy

1
На сторінці сторінки: "Замініть входження початкових аргументів у початкових аргументах іменами, прочитаними зі стандартного введення." Найголовніше, що там сказано: "Пропуски без котирування не закінчують вхідні елементи; натомість роздільник - символ нового рядка". Таким чином, < filesмарка xargsотримати список файлів в якості стандартного вводу. Потім він викликає початковий аргумент rm -rу кожному отриманому рядку (= ім'я файлу). За допомогою -Iопції розбиття здійснюється на основі нових рядків, а не пробілів, а це означає, що ця операція безпечна для файлових шляхів із пробілами в них. Я не розумію вашого іншого коментаря.
slhck

список занадто довгий. якщо у мене є 1000+ файлів, щоб видалити його занадто довго для xargs
chovy

Можливо, ви можете зробити щось подібне: cat files | tr '\n' '\0' | xargs -0 rm -r- це замінює нові рядки ASCII нульовими символами. xargsПотім зателефонує rmза кожною з отриманих ліній окремо.
slhck

1

якщо у вас є шляхи з пробілами у файлі list.txt - один шлях на рядок. Тоді наступний спосіб виклику xargs збереже пробіли:

cat list.txt | xargs -d \\n rm -r

це не зазнає занадто довгих помилок у списку аргументів. звернення
чови
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.