데이터 파일을 정리하는 스크립트가 있습니다.
주문하다:
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
또한 -print
기본 작업인 delete 를 수행합니다.
find /ddomain/data/shop12/ -name '*data-*' -mtime +15
파일만 찾는 경우 -type f
다음도 추가하세요.
find /ddomain/data/shop12/ -type f -name '*data-*' -mtime +15
답변2
다른 사람들이 이미 말했듯이, grep -v '^.$'
단 하나의 문자로 구성된 줄을 필터링하십시오(줄 시작( ^
), 문자( .
), 줄 끝( )으로 구성된 줄). 이를 작성하는 또 다른 방법은 where, 만들기 및 암시적( 일치 ) $
입니다. 전체 라인).grep -vx .
-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