
두 개의 특정 파일을 이동해야 합니다. 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 4
find
디렉토리 구조에서 4단계 이상 내려가지 말라고 지시합니다 .-type f
find
일반 파일만 찾도록 지시합니다 .-name 'file[AB].txt'
find
glob 과 일치하는 파일만 찾도록 지시합니다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