명령 find . -name '*2015*' -mmin +1440 -ls
은 아마도 당신이 원하는 것을 할 것입니다. 자세한 내용은 아래를 참조하십시오.
첫 번째 명령은 -name 2015
이었습니다. 이름이 정확히 다른 파일 이 없는 파일 만 찾기 때문에 작동하지 않았습니다 . 2015
두 번째 명령 인 find . -name *2015* -mtime +1 -exec ls -ltrh {} \;
두 가지 이유로 실패했을 수 있습니다.
1. 인용 부호가없는 *
문자는 쉘에서 확장 된 다음로 전달됩니다 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*'
, 때문에 :
그러나이 경우에는 실제로 중요하지 않습니다. '
그리고 "
모두 치료 *
같은과 표현은 충분히 복잡하지 않습니다 \
열심히 이해할 수 있도록하기 위해 인용.
2. -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 시간 전에 1 시간 이상인 파일 만 일치합니다 . 따라서 어제의 파일이 일치하지 않습니다.
find -mtime +1이 2 일보다 오래된 파일 만 반환하는 이유를 참조하십시오 . steeldriver 에서 제안한 대로 자세한 내용을 참조하십시오 .
24 시간 전에 언제라도 마지막으로 수정 된 파일을 찾으려면 1440 분 전에 다음을 사용 하여 파일을 지정 하는 것이 좋습니다 -mmin +1440
.
find . -name '*2015*' -mmin +1440 -exec ls -ltrh {} \;
일부 독자들은 내가 왜 인용을하지 않았는지 궁금 할 것 {}
입니다. 어떤 사람들 {}
은 인간에게 그것이 중괄호 확장 의 표현이 아니라는 것을 상기 시키라고 인용 합니다 . Bourne의 스타일 쉘 (같은 bash는 ) 하지 않는 필요 {}
아무것도 내부로는 인용한다. Bourne 스타일이 아닌 일부 쉘은 특수하게 처리합니다. 일부 사용자가 인용 한 이유 일 수 있습니다. 그러나 또한 거기에 오해 중 하나는 때때로 인용해야 {}
하므로 -exec
제대로 공백 핸들 파일 이름은. 즉, S 거짓으로 {}
하거나 '{}'
, 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
find
부분은 나에게는 좋아 보이지만-exec
매개 변수에 문제가 있습니다 . 나는 그것을 작동시키지 못했습니다. (저는 모든 jpg 파일을 한 폴더에서 상위 디렉토리로 옮기려고했지만 수동으로 끝냈습니다 ...)