Puncte:0

Bash: funcția/utilizarea necorespunzătoare a numelui de bază al comenzii

drapel ca

Ceea ce vreau în următoarea comandă este să găsesc anumite fișiere și să le muți în alte directoare în timp ce adaug „.log” la numele fișierului de destinație.

find /src/dir/ -type f -mtime +3 -exec mv {} /dst/dir/`basename {}`.log \;

Dar eșuează pentru că nume de bază comanda inclusă în backticks nu funcționează corect. $(nume de bază {}) are si rezultat asemanator.

mv: nu se poate muta /src/dir/foo în /dst/dir//src/dir/foo.log: Nu există un astfel de fișier sau director

Orice idee ar fi apreciata.

Puncte:1
drapel in

Asta pentru că coaja vede `nume de bază {}` sau $(nume de bază {}) înainte de a gestiona argumentele pentru a le găsi și procesa. Scrieți un script care face ceea ce doriți și rulați-l cu el -exec in schimb.

find ... -exec myscript {} \;

Unde myscript este ceva de genul

#! /bin/sh
mv „$1” /dst/dir/$(nume de bază „$1”).log

Puteți invoca shell-ul pentru fiecare fișier găsit, deci este posibil și următoarele:

find ... -exec bash -c 'mv "$1" "$(basename "$1").log"' -- {} \;

Dar testați corect o astfel de soluție pentru a vă asigura că citarea și evadarea funcționează corect.

aschkant avatar
drapel ca
Mulțumesc @choroba pentru distribuire. Deoarece linia este o parte a unui script în sine, mă întreb dacă aș putea pur și simplu să adaug argumente la -exec sau total într-o singură linie pentru a termina munca.
drapel in
Puteți adăuga argumente, dar nu puteți folosi sintaxa shell pe ele - decât dacă încercați să scrieți ceva de genul `-exec bash -c 'mv "$1" "$(basename "$1").log"' -- {} \;`

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.