Puncte:0

Cum să ștergeți o listă de nume de fișiere fără cale care se potrivesc în mai multe subdirectoare?

drapel uz

Cum să ștergeți o listă de nume de fișiere fără cale care se potrivesc în mai multe subdirectoare?

Delete_list.txt poate conține (fiecare nume de fișier este pe linie):

a.jpg
b.jpg
c.jpg

Aceste fișiere pot exista în mai multe subdirectoare. Vreau să le șterg pe toate. Am incercat dar fara succes:

pentru f în $(delete_list.txt); gasesti. -nume "$f" -tip f -delete ; Terminat 

a 2-a încercare

  f în $(delete_list.txt); gasesti. -nume „$f” -tip f -exec rm -f {} \;

a 3-a încercare

în timp ce IFS= citește fișierul -r ; do rm -r -- "$fișier" ; terminat < delete_list.txt

a 4-a încercare

pentru f în $(delete_list.txt); face if [ -f $f ]; atunci rm $f; fi; Terminat
drapel ar
Ați putea, vă rog, să rescrieți scriptul, astfel încât fiecare comandă să fie în linii separate și indentată acolo unde este cazul? Acest lucru este foarte greu de citit. Se pare că aveți 3 încercări diferite de scenariu amestecate.
bac0n avatar
drapel cn
Notă: chiar dacă nu este recomandat și îl sfătuiesc cu tărie, sintaxa este `$(
Puncte:3
drapel hr

Într-un shell, cum ar fi bash, care acceptă matrice, puteți asambla toate numele într-un singur găsi predicat

#!/bin/bash

declara -a namep=()

în timp ce IFS= citește -r nume; do 
  namep+=( -name "$nume" -o )
terminat < delete_list.txt

unset namep[-1] # elimină următorul străin -o

găsi . -type f \( "${namep[@]}" \) -print

Schimbare -imprimare la -șterge (sau -printare -stergere) numai atunci când sunteți sigur că găsiți fișierele potrivite.

Elias Estatistics avatar
drapel uz
Atat de rapid! În câteva minute șterge multe mii de fișiere din mii de subdirectoare!!! Puteți explica mai multe ce este „matrice” în bash și cum este utilizat/utilizat în sistem? Și de ce este mult mai rapid decât opțiunea mea?
Elias Estatistics avatar
drapel uz
Ce înseamnă „conducere străină”?
drapel hr
@EliasEstatistics vrem ca secvența să înceapă cu un `-name` nu cu un `-o`, așa că eliminăm al 0-lea element de matrice
drapel hr
... Tocmai am modificat puțin secvența - poate e mai clar așa?
Elias Estatistics avatar
drapel uz
Trebuie să citesc despre matrice în linux și „extreneous lead”. Multumesc oricum.
Puncte:0
drapel uz

Asta a făcut trucul pentru mine. Acesta șterge toate numele de fișiere potrivite din fișierele date din toate subdirectoarele.

Cu toate acestea, este extrem de lent. Delete_list.txt conține aproximativ 100 de nume de fișiere care pot fi găsite în peste 250 de mii de subdirectoare.

 în timp ce citește -r FILE; do echo "$(găsește . -nume "$FIȘIER" -type f -șterge): $FIȘIER"; terminat < delete_list.txt

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.