Puncte:5

cum să utilizați argumentul liniei de comandă pentru a găsi fișiere .txt care au un nume comun

drapel us

Am mai multe fișiere într-un director numit fișiere. Trebuie să citesc fiecare fișier .txt din acest director:

abc123.txt
abc234.txt
abc345.txt
abc.txt
def123.txt
def234.txt
def345.txt

De exemplu, când scriu ./filtru.sh abc în terminal, va căuta .TXT fișier al cărui nume conține abc.

#!/bin/bash
 
input1=$1


găsiți ./files -type f -name „*$input1*.txt” 

ieșirea mea arată așa

./files/abc345.txt
./files/abc234.txt
./files/abc123.txt
./files/abc.txt

o fac corect? Și, de asemenea, este posibil să nu se arate ./fișiere/ în ieșire? Și de ce arată rezultatul meu abc345, abc234, abc123 în loc de abc123, abc234, abc345?

Puncte:9
drapel jp
  • Da este bine. Dar când te familiarizezi mai mult cu găsi, o veți face direct pe linia de comandă (în loc să fie printr-un shellscript). Folosesc foarte mult shellscript-uri, dar în principal pentru sarcini mai mari (mai multe linii de comandă).

  • Puteți elimina punctul de pornire sub care a fost găsit:

    găsiți ./files -type f -name „*$input1*.txt” -printf „%P\n”
    
  • În cele din urmă, puteți sorta fișierele după aceea:

    find ./files -type f -name "*$input1*.txt" -printf "%P\n" | fel
    
  • Dacă un număr mic sau fișiere mici, puteți scrie conținutul pe terminal cu

    find ./files -type f -name "*$input1*.txt" -exec echo "--- {}:" \; -exec cat {} \;
    

    Ieșirea poate fi redirecționată către un fișier prin > output.txt

    find ./files -type f -name "*$input1*.txt" -exec echo "--- {}:" \; -exec cat {} \; > output.txt
    

    Derulați pe orizontală pentru a vedea sfârșitul acestei linii.

  • dacă sunt multe fișiere sau unele fișiere mari, poate fi mai bine să vizualizați fișierele într-un editor de text mai mic sau poate fi preferat,

    find ./files -type f -name "*$input1*.txt" -exec less {} \;
    

    și ieșiți cu „q” din mai puțin între fiecare fișier.

  • găsi contra ls

    • găsi este un instrument avansat care poate găsi fișiere [recursiv] într-un arbore de directoare și are multe opțiuni. Este nevoie de mult timp pentru a învăța ce se poate face cu el. Vedea omul găsi sau poate mai ușor, vezi un tutorial prin internet.

    • ls este un instrument mai simplu, care listează fișierele la un nivel de director, de obicei nivelul curent. Are, de asemenea, multe opțiuni, dar este destul de ușor de utilizat din linia de comandă. Vă rugăm să aveți în vedere că ls se poate comporta într-un mod confuz în shellscript-uri, în special în combinații cu alte comenzi. Vedea om ls.

user15907922 avatar
drapel us
Ahh, mulțumesc, funcționează! Pot să știu cum să citesc sau să printez conținutul din acele fișiere txt? Am încercat să fac de aproximativ 1 zi deja încă nu îmi dau seama
vanadium avatar
drapel cn
În ceea ce privește punctul 1, dacă este o lucrare recurentă, crearea unui script shell este, evident, o practică bună.
sudodus avatar
drapel jp
@user15907922, Ce vrei să spui prin citire sau printare? Doriți să imprimați totul pe terminal sau să le vizualizați într-un instrument sau să imprimați pe o imprimantă de hârtie?
user15907922 avatar
drapel us
tipăriți conținutul fișierului text pe terminal.
sudodus avatar
drapel jp
@user15907922, sugerez câteva metode pentru a vizualiza fișierele. Va funcționa unul dintre ei?
user15907922 avatar
drapel us
@sudodus da, funcționează. Mulțumesc mult! Și pot să știu cum să copiez acel conținut din fișierul .txt într-un alt fișier .txt? să spunem copy to copy.txt
sudodus avatar
drapel jp
Puteți **redirecționa** rezultatul către terminal într-un fișier cu `>`. Voi arăta asta prin editarea răspunsului.
user15907922 avatar
drapel us
asta e treaba! multumesc ca m-ati ajutat!
Puncte:5
drapel in

Puteți să o faceți așa și să urmați sfaturile @sudodus pentru a îmbunătăți rezultatul.

in orice caz găsi este puțin exagerat pentru cazul dvs. de utilizare, ați putea pur și simplu folosi ls:

ls -1 fișiere/abc*

Pentru a obține numele directorului:

(fișiere CD && ls -1 abc*)
user15907922 avatar
drapel us
dar cum să copiați acel conținut din fișierul txt într-un alt fișier .txt?
pLumo avatar
drapel in
ce vrei să spui? Nu văd această parte în întrebarea ta. Vrei să faci `cat files/abc*` sau `less files/abc*`?
user15907922 avatar
drapel us
e ok am rezolvat. mulțumesc pentru ajutor!

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.