Я хочу найти много имен файлов, которые записаны в текстовом файле. Как я мог передать этот текстовый файл find
команда (или другая команда?) для нахождения каждой строки его (каждая строка является именем файла)? Моя цель состоит в том, чтобы найти все имена файлов и удалить их.
find /path/to/my/files -name "list-from-file.txt" -delete
Если существует файл (давайте назовем его filenames.txt
) со списком имен файлов Вы хотите удалить, например.
a.txt
subfolder1/b.sh
subfolder2/subfolder3/c.jpg
/home/user/a.txt
Вы просто должны cd
к папке, где относительные пути, содержавшиеся в файле, допустимы и дают команду:
< path/to/filenames.txt xargs echo rm
Вы заметите, что это просто перечислит rm
команды. Это - проверка защиты. Удалить echo
запустить удаление файла на Ваш собственный риск!
Заметьте, что пути будут непосредственно переданы rm
без дополнительных мер, таким образом, последняя строка в моем примере будет работать полным путем.
Использовать find
с xargs
если у Вас есть только имя файлов, сохраненное в myTextFile:
xargs -d '\n' -a /path/to/myTextFile -I FILENAME find /src -type f -name FILENAME #-delete
если бы Вы знаете, что все файлы находятся в одном определенном каталоге, или им включали их путь, то команда была бы:
xargs -d '\n' -a /path/to/myTextFile echo rm -f --
Или простое использование bash
сценарий.
while IFS='\n' read -r FILE
do
find /src -type f -name "$FILE" #-delete
done < /path/to/myTextFile
Продвиньте свой myTextFile к некоторое время циклу с read
команда:
while IFS= read -r f; do
test -f "$f" && rm -f "$f"
done < myTextFile
for i in `less list-from-file.txt`; do rm $i;done
где less
откроет файл list-from-file.txt
Так, каждая строка файла list-from-file.txt
находится в $i
Наконец, rm
команда удалит файл.