This shows you the differences between two versions of the page.
|
uso:laboratoare:laborator-07:inspect-fs [2021/11/16 09:04] liza_elena.babu [Căutarea unui fișier în sistem] |
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 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** | ||