find -exec를 사용하여 파일을 하위 디렉터리로 복사하세요.

find -exec를 사용하여 파일을 하위 디렉터리로 복사하세요.

.png이 명령이 17개 파일을 현재 디렉터리 내의 하위 디렉터리에 복사하지 않은 이유는 무엇입니까 ?

$ find . -maxdepth 1 -mtime -3 | wc -l
17
$ find . -maxdepth 1 -mtime -3 -print0 | grep -z loader | xargs -r0 cp -t ./user_name_tutorial/
$ find . -maxdepth 1 -mtime -3 -print0
../Plugins.png./Screenshot from 2015-08-06 22:30:56.png./Screenshot from 2015-08-06 22:28:21.png./Plugins_ex-in-post.png./Screenshot from 2015-08-06 22:31:14.png./Pages_visit_site.png./user_name_tutorial./Page_edit.png./Screenshot from 2015-08-06 22:28:52.png./Page_edit-visual.png./Plugins-google-maps_v2-example.png./Screenshot from 2015-08-06 22:29:27.png./Plugin_google_apps.png./Screenshot from 2015-08-06 22:30:44.png./Media_uploads.png./Plugins_add_new.pnguser_name@COMP_NAME-X:~/Pictures$ 

답변1

당신은 우리에게 결과를 보여주었습니다

find . -maxdepth 1 -mtime -3 -print0

의 출력은 무엇입니까

find . -maxdepth 1 -mtime -3 -print0 | grep -z loader

? loader 표시된 출력에 해당 단어가 포함된 파일 이름이 표시되지 않습니다 . 의 출력 grep(즉, 의 입력 xargs)에 아무것도 포함되어 있지 않으면 당연히 아무것도 복사되지 않습니다.


반품,

  • find … | grep foofind … -name "*foo*"대신 프로세스를 말하고 저장할 수 있습니다 .
    와는 별개로:

    -maxdepth 1(아시다시피) 현재 디렉토리로 검색을 제한하는 를 사용하신 것으로 확인되었습니다 . 해당 항목이 없으면 find하위 디렉터리를 찾아서 find … | grep foo다음을 제공합니다.모두food_fight다음에 관계없이 이름이 , 또는 인 하위 디렉토리 football의 파일pound_foolish기록한 것이름, 이후 grep전체(.-relative) 파일 이름뿐만 아니라 경로 이름입니다.

  • -maxdepth 1find현재 디렉토리 내의 하위 디렉토리 이름 보고를 방지하지 않습니다 . 따라서 이름이 loader( 또는 )인 other_loader_files하위 디렉토리가 있는 경우그것의 이름에 전달됩니다 cp. 이는 귀하가 말하지 않았기 때문에 오류 메시지를 표시할 뿐입니다 cp -r. 그러나 방심하여 불쾌한 일을 할 수 있는 유사한 상황이 있을 수 있습니다.
  • 라고 말함으로써 위의 (잠재적인) 문제를 피할 수 있습니다 -type f.
  • -mtime -3(아시다시피) 수정 날짜를 기준으로 검색을 제한하는 을(를) 사용하고 계신 것으로 알고 있습니다 . -mtime -3또는 같은 검색 제한 테스트를 사용하지 않는 경우 와일드카드(종종 "glob" 또는 파일 이름 확장 패턴이라고 함)를 -type f사용하는 것은 find … -maxdepth 1다음과 같은 와일드카드를 사용하는 것과 거의 동일합니다.

    cp -t ./user_name_tutorial/ *loader*
    

    또는

    cp *loader* ./user_name_tutorial/
    

관련 정보