Bash에서 재귀적으로 디렉터리 반복

Sheeraz Gul 2024년2월15일
  1. Bash에서 재귀적으로 디렉터리 반복
  2. 디렉토리를 재귀적으로 순환하여 특정 확장자를 가진 파일을 가져옵니다.
  3. 디렉토리를 재귀적으로 순환하여 파일을 다른 디렉토리로 이동
  4. 디렉터리를 재귀적으로 순환하여 파일 삭제
Bash에서 재귀적으로 디렉터리 반복

이 튜토리얼은 Bash에서 재귀적으로 디렉토리를 반복하는 방법을 보여줍니다.

Bash에서 재귀적으로 디렉터리 반복

다른 디렉터리로 작업하는 동안 디렉터리를 통한 루핑이 종종 필요합니다. Bash를 포함한 모든 Linux 터미널에서 유사한 명령을 사용하여 디렉토리를 재귀적으로 반복할 수 있습니다.

먼저 find 명령을 사용하여 현재 디렉토리의 구조를 확인합니다. find 명령은 현재 또는 지정된 디렉토리의 모든 파일과 폴더를 표시합니다.

모든 파일을 보려면:

find . -type f -print0

특정 디렉토리의 파일을 보려면 다음을 수행하십시오.

find /mnt/c/Users/Sheeraz/DemoFolder1 -type f -print0

/mnt/c/Users/Sheeraz/DemoFolder1은 확인하려는 디렉토리 경로입니다. 이 디렉토리의 구조는 다음과 같습니다.

디렉토리 구조

-type f 옵션은 해당 디렉토리의 파일만 가져오고 폴더는 가져오지 않는 데 사용됩니다. 이 명령의 출력은 다음과 같습니다.

/mnt/c/Users/Sheeraz/DemoFolder1/Delftstack.java/mnt/c/Users/Sheeraz/DemoFolder1/delftstack.rtf/mnt/c/Users/Sheeraz/DemoFolder1/demo.bmp/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Delftstack.java/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/delftstack.rtf/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/demo.bmp/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Example1.java/mnt/c/Users/Sheeraz/DemoFolder1/Example1.java/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Delftstack.java/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/delftstack.rtf/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/demo.bmp/mnt/c/Users/Sheeraz/D

디렉토리의 폴더도 가져오려면 위 명령에서 -type f를 삭제하십시오.

find /mnt/c/Users/Sheeraz/DemoFolder1 -print0

파일 이름 구조를 알게 되면 다음 코드를 사용하여 디렉터리를 재귀적으로 반복합니다.

for x in $(find /mnt/c/Users/Sheeraz/DemoFolder1 -type f -print0)
do
    echo $x;
done;

위의 코드는 /mnt/c/Users/Sheeraz/DemoFolder1 디렉토리를 재귀적으로 반복하고 각 파일의 이름을 반향합니다. 이 명령의 출력을 참조하십시오.

/mnt/c/Users/Sheeraz/DemoFolder1/Delftstack.java/mnt/c/Users/Sheeraz/DemoFolder1/delftstack.rtf/mnt/c/Users/Sheeraz/DemoFolder1/demo.bmp/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Delftstack.java/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/delftstack.rtf/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/demo.bmp/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Example1.java/mnt/c/Users/Sheeraz/DemoFolder1/Example1.java/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Delftstack.java/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/delftstack.rtf/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/demo.bmp/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Example1.java

디렉토리를 재귀적으로 순환하여 특정 확장자를 가진 파일을 가져옵니다.

보시다시피 모든 파일을 표시하거나 작업할 필요가 없습니다. 이 명령을 -name 옵션과 함께 사용하여 특정 확장자를 가진 파일을 가져올 수도 있습니다.

다음 명령을 참조하십시오.

for x in $(find /mnt/c/Users/Sheeraz/DemoFolder1 -type f -name '*.java');
do
    echo $x;
done;

위의 코드는 .java 확장자를 가진 /mnt/c/Users/Sheeraz/DemoFolder1의 파일만 인쇄합니다. 출력을 참조하십시오.

/mnt/c/Users/Sheeraz/DemoFolder1/Delftstack.java
/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Delftstack.java
/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Example1.java
/mnt/c/Users/Sheeraz/DemoFolder1/Example1.java
/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Delftstack.java
/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Example1.java

디렉토리를 재귀적으로 순환하여 파일을 다른 디렉토리로 이동

또한 Bash mv 명령을 사용하여 디렉터리를 재귀적으로 반복하여 파일을 이동할 수 있습니다. 이 명령의 구문은 다음과 같습니다.

mv -v $filename $destination directory

재귀 루프에서 이 명령을 사용하여 파일을 대상 디렉터리로 이동할 수 있습니다. 예를 들어 보겠습니다.

for x in $(find /mnt/c/Users/Sheeraz/DemoFolder1 -type f -name '*.java');
do
    mv -v $x /mnt/c/Users/Sheeraz/DemoFolder2
done;

DemoFolder2는 빈 디렉토리입니다.

이동 전 대상 디렉토리

출력:

renamed '/mnt/c/Users/Sheeraz/DemoFolder1/Delftstack.java' -> '/mnt/c/Users/Sheeraz/DemoFolder2/Delftstack.java'
renamed '/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Delftstack.java' -> '/mnt/c/Users/Sheeraz/DemoFolder2/Delftstack.java'
renamed '/mnt/c/Users/Sheeraz/DemoFolder1/DemoFolder2/Example1.java' -> '/mnt/c/Users/Sheeraz/DemoFolder2/Example1.java'
renamed '/mnt/c/Users/Sheeraz/DemoFolder1/Example1.java' -> '/mnt/c/Users/Sheeraz/DemoFolder2/Example1.java'
renamed '/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Delftstack.java' -> '/mnt/c/Users/Sheeraz/DemoFolder2/Delftstack.java'
renamed '/mnt/c/Users/Sheeraz/DemoFolder1/SubFolder/Example1.java' -> '/mnt/c/Users/Sheeraz/DemoFolder2/Example1.java'

이동 후 대상 디렉토리

우리가 볼 수 있듯이 명령은 디렉터리를 통해 재귀적으로 반복되고 java 확장자를 가진 파일을 대상 디렉터리로 이동했습니다.

디렉터리를 재귀적으로 순환하여 파일 삭제

rm -rf 명령을 사용하여 주어진 디렉토리에서 파일을 제거할 수 있습니다. 이 명령의 구문은 다음과 같습니다.

rm -rf $filename

이 명령을 재귀 루프에 넣어 디렉터리에서 모든 파일을 재귀적으로 제거해 보겠습니다.

for x in $(find /mnt/c/Users/Sheeraz/DemoFolder1 -type f);
do
    rm -rf $x
done;

위의 스크립트는 기본 디렉토리와 하위 디렉토리에서 모든 파일을 삭제합니다. 명령에서 파일만 선택되기 때문에 폴더는 삭제되지 않습니다. 출력을 참조하십시오.

디렉토리에서 파일 제거

작가: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook