Намиране и копиране на файлове с определени разширения с командата "find"

Намиране и копиране на файлове с определени разширения

Командата "find" е мощен инструмент в Linux, който позволява потребителите да намират и извършват операции с файлове и директории според разнообразни критерии. Една от най-често използваните задачи на "find" е да открие файлове с определени разширения и след това да ги копира в желана директория.

В тази статия ще разгледаме как да използваме командата “find” за тази цел.

За да намерите всички файлове с определени разширения в текущата директория и поддиректориите, използвайте командата "find":

find . -type f \( -name "*.sh" -o -name "*.txt" \)

Тази команда ще намери всички файлове с разширение .sh или .txt в текущата директория и поддиректориите.

find . -type f -name "*.txt"

Тази команда ще намери всички файлове с разширение .txt в текущата директория и поддиректориите.

За да копирате в текстов документ всички файлове с разширение .txt , използвайте следната команда:

find . -type f -name "*.txt" > files.txt

Тази комбинация от команди ще изведе списъка с намерените .txt файлове и ще го запише във файл с име "files.txt". Ако "files.txt" не съществува, този оператор ще го създаде. Ако вече съществува, операторът ще го презапише.

Как да пропуснете определена дестинация за търсене

Добавете опцията "-not -path" за да изключите файловете, свързани с определена директория.

Например, за да изключите файловете, свързани в директорията .vscode:

find . -type f -name "*.txt" -not -path "./.vscode/*"

Друг пример: Предположете, че имате следната файлова структура:

/home/user/documents/
                  ├── file1.txt
                  ├── file2.jpg
                  ├── subfolder/
                  │     ├── file3.txt
                  │     ├── file4.pdf
                  │     └── file5.jpg
                  └── general/
                        ├── file6.txt
                        └── file7.jpg

Искате да намерите всички .txt файлове в директорията /home/user/documents/ и нейните поддиректории, без да включвате директорията /home/user/documents/general/ в търсенето. След това искате да копирате тези .txt файлове в нова директория /home/user/kopirani_tuk/.

Командата за този случай би изглеждала така:

find /home/user/documents/ -not -path "/home/user/documents/exclude/*" -name "*.txt" -exec cp {} /home/user/kopirani_tuk/ \;

Тази команда ще намери всички .txt файлове в директорията /home/user/documents/ и нейните поддиректории, без да включва директорията /home/user/documents/general/. След това намерените .txt файлове ще бъдат копирани в директорията /home/user/kopirani_tuk/.

След изпълнението на тази команда, директорията /home/user/kopirani_tuk/ ще съдържа всички .txt файлове от началната директория, които не са в директорията за изключване.

Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу: