Используйтеfind
:
find ~/tmp/example -type f ! -name '*.war' -exec echo {} \;
интерактивное удаление можно выполнить, используя?
(вопросительный знак )в качестве подстановочного знака. например.
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
Я думаю, вы только что столкнулись с одной из причин, по которой обычно вам говорят не анализировать вывод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