Рейтинг:0

Как удалить список имен файлов без пути, которые совпадают в нескольких подкаталогах?

флаг uz

Как удалить список имен файлов без пути, которые совпадают в нескольких подкаталогах?

Delete_list.txt может содержать (каждое имя файла в строке):

а.jpg
б.jpg
с.jpg

Эти файлы могут существовать в нескольких подкаталогах. Я хочу удалить их все. Я пытался, но безуспешно:

для f в $(delete_list.txt); найти . -name "$f" -type f -delete ; сделано 

2-я попытка

  f в $(delete_list.txt); найти . -name "$f" -type f -exec rm -f {} \;

3-я попытка

в то время как IFS= читать -r файл; сделать rm -r -- "$ файл" ; сделано <delete_list.txt

4-я попытка

для f в $(delete_list.txt); сделать, если [ -f $f ]; затем rm $f; фи; сделано
флаг ar
Не могли бы вы переписать сценарий так, чтобы каждая команда находилась в отдельной строке и с отступом, где это необходимо? Это очень тяжело читать. Похоже, у вас есть 3 разных попытки сценария, смешанных вместе.
bac0n avatar
флаг cn
Примечание: даже если это не рекомендуется, а я настоятельно не рекомендую этого делать, синтаксис такой: `$(
Рейтинг:3
флаг hr

В такой оболочке, как bash, которая поддерживает массивы, вы можете собрать все имена в один найти предикат

#!/бин/баш

объявить -a namep=()

в то время как IFS= читать -r имя; делать 
  namep+=( -name "$name" -o )
сделано <delete_list.txt

unset namep[-1] # удалить лишнее окончание -o

найти . -type f \( "${namep[@]}" \) -print

Изменять -Распечатать к -удалять (или же -печатать -удалить) только в том случае, если вы уверены, что он находит нужные файлы.

Elias Estatistics avatar
флаг uz
Так быстро! За считанные минуты удаляет многие тысячи файлов в тысячах подкаталогов!!! Можете ли вы подробнее объяснить, что такое «массив» в bash и как он используется/используется в системе? И почему это намного быстрее моего варианта?
Elias Estatistics avatar
флаг uz
Что значит "посторонний ведущий"?
флаг hr
@EliasEstatistics мы хотим, чтобы последовательность начиналась с `-name`, а не `-o`, поэтому мы удаляем 0-й элемент массива
флаг hr
... Я просто немного изменил последовательность - может быть, так понятнее?
Elias Estatistics avatar
флаг uz
Я должен прочитать о массивах в линуксе и "посторонних интерлиньяжах". Спасибо, в любом случае.
Рейтинг:0
флаг uz

Это помогло мне. Он удаляет все совпадающие имена файлов в заданных файлах во всех подкаталогах.

Тем не менее, это очень медленно. Файл delete_list.txt содержит около 100 имен файлов, которые можно найти в более чем 250 тысячах подкаталогов.

 при чтении -r ФАЙЛ; do echo "$(find . -name "$FILE" -type f -delete): $FILE"; сделано <delete_list.txt

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.