![파일 확장자로 디렉토리를 찾고 다른 곳으로 복사/이동 [닫기]](https://linux55.com/image/132796/%ED%8C%8C%EC%9D%BC%20%ED%99%95%EC%9E%A5%EC%9E%90%EB%A1%9C%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EB%A5%BC%20%EC%B0%BE%EA%B3%A0%20%EB%8B%A4%EB%A5%B8%20%EA%B3%B3%EC%9C%BC%EB%A1%9C%20%EB%B3%B5%EC%82%AC%2F%EC%9D%B4%EB%8F%99%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
파일 확장자와 텍스트로 검색한 다음 바이너리 파일을 동일한 폴더에 복사하고 싶습니다. 예를 들어, 나는 디렉토리에 있고 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
파일이 실제로 존재하는지 여부는 테스트하지 않습니다.
또한보십시오: