Puncte:0

Cum găsesc foldere fără un anumit nume?

drapel bf

Încerc să găsesc o mulțime de foldere, toate fără o anumită paranteză. Sunt dosare de filme, așa:

Zombie Flesh Eaters (1979) [tmdb-7219]
Zombieland (2009) [tmdb-19908]
Zombieland Double Tap (2019) [tmdb-338967]

Dar trebuie să le găsesc pe cele FĂRĂ paranteza [tmdb].

Nu sunt sigur cum să fac asta?

Editare rapida: Am încercat să folosesc reg-ex \[.*?\] pentru a găsi totul cu o paranteză în el, dar nu sunt sigur dacă funcționează corect (nu sunt atât de bun la regex, dar folosirea unui tester reg-ex confirmă că caută ceva în paranteze).

Dar trebuie să găsesc folderele FĂRĂ paranteze.. Și nu știu cum să fac asta

vanadium avatar
drapel cn
Cum găsești în primul rând? În unele cazuri, un „grep -v” vă poate ajuta.
SDXCPTDR avatar
drapel bf
Folosind acest șir `'\[.*?\]'` când folosiți `find`.. Nici măcar nu sunt sigur că funcționează corect. Dar trebuie să găsesc folderele fără paranteză :)
vanadium avatar
drapel cn
Avem nevoie de aceste informații pentru a fi în întrebare. Folosiți „editați” pentru a vă clarifica întrebările. Comentariile nu pot fi citite sau pot dispărea oricând.
muru avatar
drapel us
„Testerul reg-ex” folosește aceeași aromă de expresii regex ca și „find”? `.*?` arata ca Perl, nu are sens sa ai `?` dupa `*` in BRE sau ERE.
SDXCPTDR avatar
drapel bf
Tocmai am incercat asta: https://www.regextester.com/ Cu rezultatul: https://i.imgur.com/mKIBLJC.png -- iarăși îmi pare rău; Nu știu multe despre regex :/
Puncte:2
drapel cn

găsi prezintă -nu operator. Spune-i unde să caute, ce fel de articol să găsească (de ex. -tip d pentru a găsi doar foldere) și ce nu ar trebui să fie în nume, adică -nu -nume „*\[*\]”. Prin urmare

find /somewhere -type d -not -name '*\[*\]'
SDXCPTDR avatar
drapel bf
Mulțumiri! Acest lucru a funcționat foarte bine pentru mine. Tocmai am adăugat un `-maxdepth 1` în cazul meu :)
Puncte:1
drapel in
Cas

Acest lucru se poate face cu ușurință.

ls -Aq1 | grep -Pv '.*\[tmdb-\d+\].*'

Țevi după ls este considerat un lucru rău în general, totuși, presupun că toate folderele nu sunt denumite ciudat pentru că sunt doar dosare de filme, așa că cred că ls este bine aici.

Nu l-am testat, dar sunt destul de încrezător că ar trebui să funcționeze.

De asemenea, bănuiesc că veți pune acele foldere într-o buclă pentru a adăuga id-ul la nume. Pură presupunere, dar presupun. Atunci acest lucru este la îndemână deoarece ieșirea ls (din cauza -..1) va fi într-o listă. Deci, puteți face cu ușurință acest lucru pentru a procesa folderele unul câte unul:

ls -Aq1 | grep -Pv '.*\[tmdb-\d+\].*' | \
în timp ce citiți nivelul -r
do
   ...
Terminat

sau

ls -Aq1 | \
în timp ce citiți nivelul -r
do
   dacă ! echo „$nivel” | grep -Pq '.*\[tmdb-\d+\].*'
   atunci
      ...
   fi
Terminat
SDXCPTDR avatar
drapel bf
Și asta a funcționat foarte bine. Mulțumesc.
Puncte:0
drapel hr

Dacă nu trebuie să căutați recursiv, atunci shell-ul bash extglob poate face negație folosind !(model) ex.

shopt -s extglob

printf '%s\n' !(*\[tmdb-*\]*)/

The extglob opțiunea este probabil activată implicit în shell-ul dvs. interactiv bash. Urmărirea / este necesar numai dacă trebuie să excludeți fișierele simple din potrivire - echivalent cu găsi ale comenzii tip -d.

Ex. dat un director cu conținut

$ ls
„Zombie Flesh Eaters (1979) [altceva aici]” „Zombieland (2009) [tmdb-19908]”
„Zombie Flesh Eaters (1979) [tmdb-7219]” „Zombieland Double Tap (2019) [tmdb-338967]”
„Zombieland (2009)”

atunci

$ printf '%s\n' !(*\[tmdb-*\]*)/
Zombie Flesh Eaters (1979) [altceva aici]/
Zombieland (2009)/

sau

$ ls -d !(*\[tmdb-*\]*)/
„Zombie Flesh Eaters (1979) [altceva aici]/” „Zombieland (2009)/”

Spre deosebire de găsi, aceasta nu se va potrivi cu directoarele ascunse în mod implicit (deși le puteți include setând shopt -s dotglob).

daca tu do trebuie să căutați recursiv, puteți adăuga shopt -s globstar si foloseste **/!(*\[tmdb-*\]*)/ deși probabil aș alege găsi în acest caz.

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.