This shows you the differences between two versions of the page.
uso:laboratoare:laborator-07:inspect-fs [2021/11/16 09:02] liza_elena.babu [Utilitarul locate] |
uso:laboratoare:laborator-07:inspect-fs [2021/11/22 16:46] (current) andreia.ocanoaia [Selectarea multiplor fișiere folosind globbing] |
||
---|---|---|---|
Line 84: | Line 84: | ||
<code bash> | <code bash> | ||
- | student@uso:~/Pictures$ mv DCIM* excursie-Sinaia-2020/ | + | student@uso:~/.../05-cli/support/support-globbing$ mv DCIM* excursie-Sinaia-2020/ |
</code> | </code> | ||
Observăm argumentul pe care l-am dat comenzii ''%%mv%%'', și anume ''%%DCIM*%%''. Expresia ''%%DCIM*%%'' este un exemplu de globbing: adică o expresie care descrie un tipar prin folosirea unor caractere speciale, așa cum este caracterul ''%%*%%''. În cazul de față, expresia ''%%DCIM*%%'' înseamnă orice fișier al cărui nume începe cu șirul de caractere ''%%DCIM%%''. | Observăm argumentul pe care l-am dat comenzii ''%%mv%%'', și anume ''%%DCIM*%%''. Expresia ''%%DCIM*%%'' este un exemplu de globbing: adică o expresie care descrie un tipar prin folosirea unor caractere speciale, așa cum este caracterul ''%%*%%''. În cazul de față, expresia ''%%DCIM*%%'' înseamnă orice fișier al cărui nume începe cu șirul de caractere ''%%DCIM%%''. | ||
Line 134: | Line 134: | ||
<code bash> | <code bash> | ||
- | student@uso:~/Pictures$ mv DCIM[0-9][0-9][0-9][0-9].jpg excursie-Sinaia-2020/ | + | student@uso:~/.../05-cli/support/support-globbing$ mv DCIM[0-9][0-9][0-9][0-9].jpg excursie-Sinaia-2020/ |
</code> | </code> | ||
Cu expresia de mai sus vom muta toate pozele din intervalul **DCIM0000** - **DCIM9999**. | Cu expresia de mai sus vom muta toate pozele din intervalul **DCIM0000** - **DCIM9999**. | ||
Line 180: | Line 180: | ||
De multe ori ne aflăm în situația în care căutăm un fișier pe disc: ex. doar ce am clonat un proiect de pe GitHub și vrem să inspectăm fișierul **Makefile** pentru a vedea cum compilăm și rulăm proiectul. Un alt exemplu poate fi că vrem să vedem cum arată fișierele de test existente în proiect. De multe ori, ințelegem mai bine proiectul doar prin simpla inspectare a testelor. | De multe ori ne aflăm în situația în care căutăm un fișier pe disc: ex. doar ce am clonat un proiect de pe GitHub și vrem să inspectăm fișierul **Makefile** pentru a vedea cum compilăm și rulăm proiectul. Un alt exemplu poate fi că vrem să vedem cum arată fișierele de test existente în proiect. De multe ori, ințelegem mai bine proiectul doar prin simpla inspectare a testelor. | ||
- | Există două utilitare care ne permit să căutăm în cadrul sistemului de fișiere: ''%%locate%%'' și ''%%find%%''. | + | Există două utilitare care ne permit să căutăm în cadrul sistemului de fișiere: ''%%locate%%'' și ''%%find%%''. Ele au fost prezentate și în ''%%laboratorul 03: Lucrul cu fișiere (2)%%''. În continuare vedem câteva exemple de folosire ale utilitarului ''%%find%%''. |
Line 223: | Line 223: | ||
</note> | </note> | ||
- | === Scenarii complexe de căutare === | ||
- | |||
- | Utilitarul ''%%find%%'' are o lungă listă de opțiuni pe care le putem folosi în expresii de căutare. Una din opțiunile mai cunoscute este ''%%-type%%'' care ne oferă posibilitatea de a căuta după tipul unui fișier: | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ find workspace/C -type f | ||
- | workspace/C/leetcode/src/226.c | ||
- | workspace/C/leetcode/src/700.c | ||
- | workspace/C/leetcode/src/278.c | ||
- | [...] | ||
- | </code> | ||
- | În exemplul de mai sus i-am transmis utilitarului ''%%find%%'' că vrem să căutăm în directorul ''%%~/workspace/C%%'' toate fișierele text (regular file) ''%%-type f%%''. | ||
- | |||
- | **Exercițiu:** Accesați pagina de manual a utilitarului find (''%%man find%%'') și căutați opțiunea ''%%-type%%''. Căutați în directorul ''%%workspace/C%%'' după fiecare tip de fișier pentru care oferă suport opțiunea ''%%-type%%''. | ||
- | |||
- | <note> | ||
- | |||
- | |||
- | Reminder: pentru a căuta în man folosim ''%%/%%'' pentru a intra în search mode și apoi introducem textul pe care îl căutam ''%%-type%%'' urmat de tasta ''%%Enter%%''; pentru a ne duce la următorul rezultat al căutării folosim tasta ''%%n%%'' (next). | ||
- | </note> | ||
- | |||
- | În cadrul unei căutări putem să combinăm opțiunile de căutare: | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ find workspace/C -type f -name "*search*" | ||
- | workspace/C/searching/modified_binary_search.c | ||
- | workspace/C/searching/ternary_search.c | ||
- | workspace/C/searching/jump_search.c | ||
- | workspace/C/searching/binary_search.c | ||
- | </code> | ||
- | În exemplul de mai sus căutăm toate fișierele text care conțin șirul **search** în nume. | ||
- | |||
- | Utilitarul ''%%find%%'' ne permite să executăm comenzi asupra rezultatelor căutării. Facem acest cu opțiunea ''%%-exec command {} ;%%''. Atunci când folosim ''%%-exec%%'', rezultatul căutării va înlocui șirul **'{}'** în textul comenzii; comanda de executat trebuie să se termine în caracterul ''%%;%%''. | ||
- | |||
- | Observăm exemplul de mai jos: | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ find workspace/C -type f -name "*search*" -exec ls -l {} \; | ||
- | -rw-r--r-- 1 student student 3312 sep 17 19:20 workspace/C/searching/modified_binary_search.c | ||
- | -rw-r--r-- 1 student student 1782 sep 17 19:20 workspace/C/searching/ternary_search.c | ||
- | -rw-r--r-- 1 student student 1624 sep 17 19:20 workspace/C/searching/jump_search.c | ||
- | -rw-r--r-- 1 student student 2799 sep 17 19:20 workspace/C/searching/binary_search.c | ||
- | -rw-r--r-- 1 student student 867 sep 17 19:20 workspace/C/searching/other_binary_search.c | ||
- | </code> | ||
- | În exemplul de mai sus, argumentul opțiunii ''%%exec%%'' este ''%%ls -l {} \;%%''. În cuvinte, pentru fiecare fișier text care conține șirul **search** vom afișa informații în format lung (''%%ls -l {}%%''). Observăm că ''%%-exec%%'' se încheie cu ''%%\;%%'': este nevoie să escapăm caracterul ''%%;%%'' pentru ca acesta să fie interpretat de către utilitarul ''%%find%%'' și nu de către terminalul în care rulăm, exact ca în cazul ''%%-name PATTERN%%''. | ||
- | |||
- | În secțiunile ce urmează vom vedea cum ne folosim de opțiunea ''%%exec%%'' pentru a face recursiv search & replace în fișiere. | ||
=== Exerciții === | === Exerciții === | ||
- | - Folosind ''%%find%%'' căutați fișierele care conțin șirul ''%%bubble_sort%%'' în nume. | + | - Folosind ''%%find%%'' căutați fișierele care conțin șirul ''%%tmp%%'' în nume. Hint: [starting point] este ''%%/%%''. |
- | - Folosind ''%%find%%'' căutați fișierele care conțin șirul ''%%quick_sort%%'' în nume. | + | - Folosind ''%%find%%'' căutați fișierele care conțin șirul ''%%bin%%'' în nume. Hint: [starting point] este ''%%/%%''. |
- | - Folosind ''%%find%%'' căutați fișierele care conțin șirul ''%%merge_sort%%'' în nume. | + | |
- | - Folosind ''%%find%%'' căutați fișierele care conțin șirul ''%%sort%%'' în nume. | + | |
**Note de subsol** | **Note de subsol** | ||