2017-10-29 2 views
-1

스피 사용하여 CentOS는 7특정 수정 날짜의 파일 이동; 그때에이 파일을 이동하는 특정 이름 및 특정 날짜를 갖는 파일을 찾으려면

를 : "명령을 찾을 수 없습니다 간부" "찾기 | xargs를 1! | | 그렙 간부는"승/실패 다음 오류와 함께 명령

find -name 'fsimage*' | xargs ls -ali | grep 'Oct 20' | -exec mv {} /hdd/fordelete/ \; 

을 발행 다른 폴더 스피

-bash: -exec: command not found xargs: ls: terminated by signal 13 
+0

스택 오버플로는 프로그래밍 및 개발 관련 질문에 대한 사이트입니다. 이 질문은 프로그래밍이나 개발에 관한 것이 아니기 때문에 주제와는 거리가 먼 것처럼 보입니다. 도움말 센터에서 [여기에서 내가 질문 할 수있는 항목은 무엇입니까?] (http://stackoverflow.com/help/on-topic)를 참조하십시오. 아마도 [Super User] (http://superuser.com/) 나 [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/)가 더 나은 곳이 될 것입니다. – jww

답변

-2

간부 당신은 (또한 당신이 쉘 OE와 함께 찾기 구문을 혼합하는 것뿐만 간부 매우 의미가 쓴 당신은 그것을 통과해야 썼다. 에드

아마 일을보다 간결 방법이 있습니다) 찾을 수 있습니다, 그러나 이것은 당신이 무엇을 기대해야합니까 : 붙여 넣기 것들 당신은 정말 이해가 안 돼요을

find -name 'fsimage*' -type f | xargs ls -ali | grep 'Oct 20' | awk '{ print $NF }' | while read file; do mv "$file" /hdd/fordelete/ ; done 

그럼에도 불구하고, 당신은하지 않는주의해야 단지/복사 웹에서, 당신은 시스템을 망칠 수도 있습니다 ...

+0

ios는 centos에 새로운 것이지만이 스크립트를 이해할 수있어서 조언을 주셔서 감사합니다. –

+0

'ls'를 이런 식으로 구문 분석하는 것은 상당히 어렵습니다.공백이있는 파일 이름은 마지막 부분 만 가져옵니다. 줄 바꿈 또는 다른 인쇄 할 수없는 문자가있는 파일 이름은 훨씬 덜 분별력있는 동작을합니다. 자세한 내용은 http://mywiki.wooledge.org/ParsingLs를 참조하십시오. –

1

또 다른 답변으로 이미 -execfind에 대한 작업이므로 쉘 명령으로 사용할 수 없습니다. 반대로 xargsgrep은 명령이므로 find 내부에 파이프 |을 사용할 수없는 것처럼 그걸 find 동작으로 사용할 수 없습니다.

하지만 더 중요한 것은, 당신이 find의 결과에 lsgrep를 사용할 수에도 불구하고 단지 시간의 일부 금액보다 오래된 파일을 이동, 당신은 안된다. 이러한 파이프 라인은 깨지기 쉽고 심볼릭 링크, 개행 문자가있는 파일 등 많은 경우에 실패합니다.

대신 find을 사용하십시오. 당신은 아주 강력하다는 것을 알게 될 것입니다.

find -name 'fsimage*' -mtime +7 -exec mv '{}' /some/dir/ \; 

mv에 파일 modified on a specific/reference date, 예를 들면 : 7 일 이상 전에 수정 예를 들어

, mv에 파일은 -mtime test를 사용 2017-10-20, 당신은 -newerXY test 사용할 수 있습니다 : 당신의 mv가 지원하는 경우, 또한

find -name 'fsimage*' -newermt 2017-10-20 ! -newermt 2017-10-21 -exec mv '{}' /some/dir/ \; 

-t 옵션 (처음 이후 여러 파일을 대상 디렉토리를 제공하기 위해), 당신은 총을 줄이고, 여러 파일에 대한 find{} + 자리를 사용할 수 있습니다 mv 명령 호출 수 (감사 @CharlesDuffy) :

find -name 'fsimage*' -mtime +7 -exec mv -t /some/dir/ '{}' + 
+0

GNU 확장 기능 ('find')이 이미 사용중이라면'mv'에 GNU 확장을 사용하여'-exec mv -t/some-dir {} +'을 만들 수 있습니다 - find'는 훨씬 적은'mv' 호출을 호출해야합니다. –

+0

좋은 아이디어, 고마워. 나는 그것을 추가 할 것이다. – randomir

관련 문제