파일 확장자로 디렉토리를 찾고 다른 곳으로 복사/이동 [닫기]

파일 확장자로 디렉토리를 찾고 다른 곳으로 복사/이동 [닫기]

파일 확장자와 텍스트로 검색한 다음 바이너리 파일을 동일한 폴더에 복사하고 싶습니다. 예를 들어, 나는 디렉토리에 있고 A마지막에는 모든 *.gdx파일( B, C, D)을 어딘가에 복사하고 싶습니다.

A  
|-- B                               
|   |-- file1.out (a text file)                     
|   |-- file1.gdx (a binary file)            
|  
|-- C         
|   |-- file2.out (a text file)  
|   |-- file2.gdx (a binary file)  
|   
|-- D         
|   |-- file3.out (a text file)  
|   |-- file3.gdx (a binary file)  

이것은 내 코드입니다.

cd 'find . -maxdepth 2 -name "*.out"|xargs grep "sometext"| awk -F'/' '{print $2}'|sort -u ' && ' find . -maxdepth 2 -name "*.gdx" -print0|xargs -0 cp -t /somewhere' 

문제는 여기에 있다면첫 번째 find여러 폴더를 캡처하고 모든 폴더의 모든 파일 *.gdx대신 첫 번째 폴더에 하나의 파일 만 복사합니다 *.gdx. 루프를 통해 수행되어야 한다고 생각하지만 스크립트 방법을 모르겠습니다.

답변1

그리고 find:

find . -type f -name '*.out' -exec grep -q 'PATTERN' {} ';' \
    -exec sh -c 'cp "$1" "${1%.out}.gdx" /somewhere' sh {} ';'

또는:

find . -type f -name '*.out' -exec grep -q 'PATTERN' {} ';' \
    -exec sh -c 'for name do cp "$name" "${name%.out}.gdx" /somewhere; done' sh {} +

현재 폴더나 다음 폴더에서 동일한 이름 접두어를 가진 파일을 찾습니다 .out. .out파일에 일치하는 줄이 있으면 파일 PATTERN.gdx동일한 디렉터리에 동일한 이름 접두어를 가진 파일이 함께 복사됩니다. 파일로 .out./somewhere.out

/somewhere복사되는 파일과 동일한 이름을 가진 기존 디렉토리 항목이 이미 있는지 또는 .gdx파일이 실제로 존재하는지 여부는 테스트하지 않습니다.

또한보십시오:

관련 정보