데이터 파일을 정리하는 스크립트가 있습니다.
명령:
for i in `find /ddomain/data/shop12/ -mtime +15 -print|grep -v "^.$" |grep data-`
함수 없이 명령을 실행해 보았지만 grep -v
아무런 차이가 없습니다.
나는 그 일이 무엇인지 알고 싶습니다 grep -v "^.$"
. 나는 이 스크립트를 만들지 않았으며 온라인에서 아무것도 찾을 수 없습니다.
답변1
grep -v "^.$"
문자가 하나만 있는 줄을 제외하고 입력의 모든 줄을 인쇄합니다.
다음과 같은 용도로 사용됩니다.
find /ddomain/data/shop12/ -mtime +15 -print|grep -v "^.$"
의 출력(상대 경로가 사용될 때 표시됨) .
에서 현재 작업 디렉터리( )를 삭제하는 것이라고 가정할 수 있습니다. 이는 옵션으로 쉽게 달성할 수 있지만 여기서는 에서 절대 경로를 사용하므로 중복됩니다 .find
.
-mindepth 1
find
data-
나중에는 이름에 가 포함된 파일만 검색하므로 grep data-
이것도 중복됩니다. 단일 find
호출에 모든 논리를 넣을 수 있습니다.
find /ddomain/data/shop12/ -name '*data-*' -mtime +15 -print
Drop -print
도 기본 동작입니다.
find /ddomain/data/shop12/ -name '*data-*' -mtime +15
참고로 파일만 찾고 있다면 -type f
다음도 추가하세요.
find /ddomain/data/shop12/ -type f -name '*data-*' -mtime +15
답변2
다른 사람들이 이미 말했듯이, grep -v '^.$'
정확히 한 문자(줄의 시작 부분( ^
), 한 문자( .
), 줄 끝( $
)으로 구성된 줄)으로 구성된 줄을 필터링합니다. 이를 작성하는 또 다른 방법은 다음과 같습니다. grep -vx .
여기서 the는 and를 암시적으로 -x
만듭니다 ( 전체 행에서 일치).^
$
.
출력에서 :
find /ddomain/data/shop12/ -mtime +15 -print
해당 명령의 출력은 find
일반적으로 다음과 같은 줄로 구성되므로 이는 거의 의미가 없습니다.
/ddomain/data/shop12/foo
/ddomain/data/shop12/foo/bar
...
해당 출력에 단일 문자가 있는 줄을 포함하는 유일한 방법은 이름이 foo<newline>X<newline>
. 그것은 완벽하게 가능하지만 그것이 그 명령의 의도였을 것 같지는 않습니다.
아마도 해당 명령은 다음에서 (잘못) 적용되었습니다.
find . -mtime +15 -print | grep -v '^.$' | grep data-
grep
항목 을 필터링하기 위한 의도였습니다 ( .
그때에도 grep -Fvx .
더 적절했을 것입니다). 그러나 그렇다면 다음과 같이 작성하는 것이 더 합리적이었을 것입니다.
find . ! -name . -path '*data-*' -mtime +15
를 사용하여 최상위 디렉터리를 필터링하려면 find /ddomain/data/shop12/
다음과 같이 하세요.
find /ddomain/data/shop12/. ! -name . -path '*data-*' -mtime +15
또는 find
구현이 조건자를 지원 하는 경우 -mindepth
:
find /ddomain/data/shop12/ -mindepth 1 -path '*data-*' -mtime +15
답변3
.
결과 목록에서 디렉터리를 제거합니다 find
. 예를 들어 설명하는 것이 더 쉽습니다.
find . -print
.
./prova2
./prova2/prova2
find . -print | grep -v '^.$'
./prova2
./prova2/prova2
보시다시피 첫 번째 코드 조각에서 결과를 찾습니다 .
. 따라서 이를 주기가 수행하는 작업에 전달합니다 for
. 두 번째 스니펫에서는 의 결과에서 디렉터리를
건너뛰기로 결정하여 해당 디렉터리를 주기로 보내지 않습니다 ..
find
for
답변4
grep -v '^.$'
문자가 하나만 있는 줄은 제외됩니다.
예:
echo "foo
> bar
> x" | grep -v '^.$'
foo
bar