노력하고있어:
내 모든 하위 디렉터리(약 50개 폴더)에 있는 모든 파일(파일 이름: OUTCAR.txt)에서 "정확도 요구" 문자열을 찾고 있습니다.
검색 문자열이 포함된 파일이 포함된 폴더만 다른 위치로 복사
현재 내 솔루션은 다음과 같습니다.
1. grep -r "required accuracy"
하지만 OUTCAR이라는 파일에서만 검색하고 싶습니다. 그렇지 않으면 내 목록의 폴더에 두 개의 파일이 있습니다.
2. grep -r "required accuracy" OUTCAR -exec scp -r {} ./final location
grep 명령을 사용하여 찾은 파일 목록에서 폴더 목록을 추출하는 방법을 전혀 모릅니다. 어쩌면 find 명령을 사용하여 파일에서 문자열을 찾을 수 있을까요?
답변1
find
사용 가능한 경우 -execdir
:
find . -type f -name "OUTCAR.txt" \
-exec grep -q "required accuracy" {} \;
-execdir scp -r ./ "/path/to/final location" \;
-type f
( )가 있는 모든 파일을 찾습니다-name OUTCAR.txt
.grep
이 문서의 "필요한 정확성"에 대해서는grep
성공 하면scp
파일이 있는 디렉터리에서...를 실행합니다-execdir
.
이는 절대 경로여야 합니다 . /path/to/final/location
그렇지 않으면 .$PWD/relative/path/from/where/find/is/executed
답변2
이 시도,
grep -lr 'required accuracy' rel1 | sed 's#/OUTCAR.txt##g' | xargs -I {} mv {} rel1_fin
-l
일반 출력을 억제합니다. 대신 print는 일반적으로 각 입력 파일의 이름을 인쇄합니다. 첫 번째 일치에서 스캔이 중지됩니다.
답변3
나는 이것이 도움이 될 것이라고 생각합니다:
grep -Rl "required accuracy" ./Source-dir/* | grep OUTCAR | xargs -I[] bash -c 'val="[]";scp -r ${val%/*} user@doman:/destination-direcory'