오늘에 속하지 않는 모든 로그 파일과 2015
이름에 포함 된 파일 만 나열하고 싶습니다 .
다음은 내가 시도한 명령입니다.
find . -name 2015 -mtime +1 -exec ls -ltrh {} \;
find . -name *2015* -mtime +1 -exec ls -ltrh {} \;
둘 다의 출력은 아무것도 아니지만 여전히 파일이 있습니다. 이 명령에 문제가 있으며 무엇을 얻지 못합니다. 어떤 도움을 주시면 감사하겠습니다.
이 명령 find . -name '*2015*' -mmin +1440 -ls
은 아마도 당신이 원하는 것을 할 것입니다. 자세한 내용은 아래를 참조하십시오.
첫 번째 명령에는 -name 2015
. 이름이 정확히 이고 다른 문자가없는 파일 만 찾기 때문에 작동하지 않았습니다 . 2015
두 번째 명령 인 find . -name *2015* -mtime +1 -exec ls -ltrh {} \;
은 몇 가지 이유로 실패했을 수 있습니다.
*
문자는 쉘에 의해 확장 된 다음에 전달됩니다 find
.직접에 포함 된 파일이있는 경우 현재 디렉토리 (당신은 당신이 실행하는 경우에있어 하나의 find ...
이름이 포함 된 명령) 2015
(그리고로 시작하지 않는 .
), 다음 쉘 확장 *2015*
하는 파일 이름 목록에 후 통과 그 목록을 find
. 이것은 당신이 원하는 것이 아닙니다. 대신, 쉘이 아닌에서 일치하는 파일을 찾을 수 *2015*
있도록 문자 그대로 찾을 인수로 전달하려고 find
합니다.
이 문제를 해결하려면 *2015*
. 이를 수행하는 세 가지 일반적인 방법이 있습니다.
'*2015*'
(예 find . -name '*2015*' -mtime +1 -exec ls -ltrh {} \;
)"*2015*"
(예 find . -name "*2015*" -mtime +1 -exec ls -ltrh {} \;
)\*2015\*
(예 find . -name \*2015\* -mtime +1 -exec ls -ltrh {} \;
)내가 제안 을 쓰는 작은 따옴표와 같은 '*2015*'
, 때문에 :
\
하면 쉘이 find
명령 에 전달하는 내용을 정확히 파악하기 어려울 수 있습니다 ."
때때로 다소 복잡한 규칙을 포함 합니다.그러나이 경우에는 그다지 중요하지 않습니다. '
그리고 "
둘 다 *
똑같이 취급 하고 표현은 \
이해하기 어렵게 인용하기에 충분히 복잡하지 않습니다 .
-mtime +1
수정 된 파일 만 선택합니다 .으로는 man find
말한다 :
Numeric arguments can be specified as
+n for greater than n,
-n for less than n,
n for exactly n.
-mtime n
File's data was last modified n*24 hours ago. See the comments
for -atime to understand how rounding affects the interpretation
of file modification times.
-atime n
File was last accessed n*24 hours ago. When find figures out
how many 24-hour periods ago the file was last accessed, any
fractional part is ignored, so to match -atime +1, a file has to
have been accessed at least two days ago.
47 시간 전에 파일이 수정되었다고 가정합니다. 얼마나 많은 24 시간입니다 기간 알아낼 find
라운드 다운 : 그 것이다 일 24 시간 전에. 그러나 -mtime +1
수정 시간이 정확히 24 시간 이상인 파일 만 일치 시킵니다. 따라서 어제의 파일은 일치하지 않습니다.
find -mtime +1이 2 일보다 오래된 파일 만 반환하는 이유는 무엇입니까?를 참조하십시오 . 자세한 내용 은 steeldriver가 제안한대로 .
24 시간 이전에 마지막으로 수정 된 파일을 찾으려면 대신 1440 분 전에 다음 과 같이 지정하는 것이 좋습니다 -mmin +1440
.
find . -name '*2015*' -mmin +1440 -exec ls -ltrh {} \;
어떤 독자들은 내가 왜 인용하지 않았는지 궁금해 할 것이다 {}
. 어떤 사람들 {}
은 그것이 중괄호 확장을 위한 표현이 아니라는 것을 인간에게 상기시키기 위해 인용 합니다 . Bourne 스타일 셸 (예 : bash ) 은{}
내부에 따옴표가 필요 하지 않습니다 . Bourne 스타일이 아닌 쉘이 특별히 처리 할 수도 있습니다. 그것이 일부 사용자가 그것을 인용하는 이유 일 수 있습니다. 그러나 때때로 인용을해야 하기 때문에 공백이있는 파일 이름을 올바르게 처리 한다는 오해 도 있습니다 . 즉, S 거짓으로 하거나 , 얻는다 같은 쉘로, 인수를 따옴표를 제거 전달하기 전에 에{}
-exec
{}
'{}'
find
'{}'
find
. 이 오해에 대응하기 위해, 나는 인용하지 않는다 {}
, 그러나 그것은 스타일의 문제 - 당신이 원하는 경우 {}
쉘이 치료되지 않는 방법을 문서로 {
하고 }
, 특별히 그의 벌금을.
또한 ls
명령을 변경 하거나 muru가 제안한 대로 명령을 find
의 -ls
작업으로 대체하는 것이 좋습니다 . 발견 된 각 파일에 대해 개별적으로 실행되므로 정렬을 지정 하는 및 플래그는 관련 이 없기 때문에 ls -ltrh
의도 한대로 작동하지 않을 수 있습니다 .-t
-r
출력은를 사용하는 것과 약간 다르게 형식화되지만 ls -l
사용하는 -ls
것이 더 간단하고 쉽습니다.
find . -name '*2015*' -mmin +1440 -ls
또는 파일 이름 (에 대한 상대 경로 포함) 만 나열하면 된다고 결정한 경우 .
, 단순히 동작을 지정하지 않고 기본 -print
동작이 사용되도록 할 수 있습니다.
find . -name '*2015*' -mmin +1440
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다