파일 확장자와 텍스트로 검색한 다음 바이너리 파일을 동일한 폴더에 복사하고 싶습니다. 예를 들어, 나는 디렉토리에 있고 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
파일이 실제로 존재하는지 여부는 테스트하지 않습니다.
또한보십시오: