некоторые файлы имеют '.' в их имени, как я могу удалить их, используя файл .txt в качестве входных данных для команды rm

Используйтеfind:

find ~/tmp/example -type f ! -name '*.war' -exec echo {} \;
0
17.01.2020, 12:18
2 ответа

интерактивное удаление можно выполнить, используя?(вопросительный знак )в качестве подстановочного знака. например.

rm 1.?

удалит1.

Недостатком является также удаление любого 1.aфайла.

если ваш список файлов list.txt с одним файлом в строке, вы можете использовать

awk '{printf "rm \"%s\"\n",$0}' file.txt 

для генерации команды

где

  • $0— это вся строка (, включая любой завершающий или начальный пробел)

, если все в порядке, используйте

awk '{printf "rm \"%s\"\n",$0}' file.txt |bash
0
28.01.2020, 02:56

Я думаю, вы только что столкнулись с одной из причин, по которой обычно вам говорят не анализировать выводls.

Тем не менее, если ваш list.txtсодержит имена файлов, которые нужно удалить, по одному на строку, и с окончанием -строки -в стиле linux -, следующий подход также должен работать:

while IFS= read filename
do
  rm "$filename"
done < list.txt

хотя вам было бы хорошо -порекомендовать сначала протестировать это (например. путем создания фиктивных файлов с помощью touch "1. this is a first test.txt", touch "2. my second_file.bla", а затем создания фиктивного файла list.txt, включающего эти имена файлов ).

Вы можете включить приведенный выше код в скрипт bashили ввести его непосредственно в строку команды -, которая должна выглядеть как строка

user@host$ while IFS= read filename; do rm "$filename"; done < list.txt
0
28.01.2020, 02:56

Теги

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