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** | ||