두 개의 특정 파일을 고유한 이름을 가진 여러 디렉터리 내의 상위 폴더로 이동

두 개의 특정 파일을 고유한 이름을 가진 여러 디렉터리 내의 상위 폴더로 이동

두 개의 특정 파일을 이동해야 합니다. fileA.txt 및 fileB.sh를 해당 상위 폴더로 호출하겠습니다.

이러한 파일 중 하나는 일반 파일이지만 다른 파일은 상위 폴더에만 적용되며 모든 폴더에 복사할 수 없습니다.

폴더 계층 구조는 다음과 같습니다.폴더 계층

상위 폴더는 고유하며 동일하게 유지되어야 합니다. 하위 폴더를 포함하는 200-300개의 상위 폴더의 하위 폴더에 총 2000개가 넘는 폴더가 있습니다.

지금까지 BASH에서 작동하지 않는 것은 다음과 같습니다.

find -maxdepth 4 -type f -name ‘*.bb’ ‘*.txt’; mv ../.

저는 스크립팅을 처음 접했고 이것이 매우 간단한 작업이라는 것을 알고 있습니다. 그림이 형편없어서 죄송합니다만 너무 오랫동안 벽에 머리를 부딪혔습니다.

답변1

fileA.txt또는 이름이 지정된 파일을 fileB.txt바로 상위 디렉터리로 이동하려면 다음을 수행하세요 .

find . -maxdepth 4 -type f -name 'file[AB].txt' -execdir mv {} ../ \;

fileA.txt또는 또는 이름이 지정된 파일을 fileB.bb바로 상위 디렉터리로 이동하려면 다음을 수행하세요 .

find . -maxdepth 4 -type f \( -name 'fileA.txt' -o -name 'fileB.bb' \) -execdir mv {} ../ \;

작동 원리

  • .find현재 디렉토리부터 시작하라고 알려줍니다 . (원하는 디렉토리로 바꿀 수 있습니다.

  • -maxdepth 4find디렉토리 구조에서 4단계 이상 내려가지 말라고 지시합니다 .

  • -type ffind일반 파일만 찾도록 지시합니다 .

  • -name 'file[AB].txt'findglob 과 일치하는 파일만 찾도록 지시합니다 file[AB].txt.

    fileA.txt또는 or 중 하나를 일치시키기 위해 논리 or( )와 결합되고 괄호로 그룹화된 fileB.bb두 가지 테스트를 사용합니다 .-name-o

    \( -name 'fileA.txt' -o -name 'fileB.bb' \)
    
  • -execdir mv {} ../ \;find파일의 디렉토리에 chdir을 지시 하고 파일의 실제 이름으로 대체될 mv {} ../쉘 명령을 실행합니다. 표현식은 상위 디렉토리에 대한 Unix 언어입니다. 후행은 단지 쉘 명령의 끝을 나타냅니다.find{}../\;find

관련 정보