[linux] 파일 찾기 및 복사

다음은 왜 파일을 대상 폴더에 복사하지 않습니까?

# find /home/shantanu/processed/ -name '*2011*.xml' -exec cp /home/shantanu/tosend {} \;

cp: omitting directory `/home/shantanu/tosend'
cp: omitting directory `/home/shantanu/tosend'
cp: omitting directory `/home/shantanu/tosend'



답변

발견 된 파일을 / home / shantanu / tosend로 복사하려는 경우 cp에 대한 인수 순서가 반대로됩니다.

find /home/shantanu/processed/ -name '*2011*.xml' -exec cp "{}" /home/shantanu/tosend  \;

참고 : find 명령 은 일치하는 파일의 자리 표시 자로 {} 를 사용 합니다.


답변

나는 이와 같은 문제에 직면했다 …

실제로 두 가지 방법으로 find명령에서 copy명령 출력을 처리 할 수 ​​있습니다.

  1. 경우 find파일 이름이 공간을 포함하지 않는 경우 명령의 출력은 어떤 공간 즉 포함되어 있지 않습니다 당신은 아래에 언급 된 명령을 사용할 수 있습니다 :

    통사론: find <Path> <Conditions> | xargs cp -t <copy file path>

    예: find -mtime -1 -type f | xargs cp -t inner/

  2. 그러나 대부분의 프로덕션 데이터 파일에는 공간이 포함될 수 있습니다. 따라서 아래 언급 된 명령은 대부분 더 안전합니다.

    통사론: find <path> <condition> -exec cp '{}' <copy path> \;

    find -mtime -1 -type f -exec cp '{}' inner/ \;

두 번째 예에서 마지막 부분, 즉 세미콜론도 find명령의 일부로 간주되며 Enter 버튼을 누르기 전에 이스케이프해야합니다. 그렇지 않으면 다음과 같은 오류가 발생합니다.

find: missing argument to `-exec'

귀하의 경우, 찾기 파일을에 복사하기 위해 복사 명령 구문이 잘못 되었습니다 /home/shantanu/tosend. 다음 명령이 작동합니다 :

find /home/shantanu/processed/ -name '*2011*.xml' -exec cp  {} /home/shantanu/tosend \;


답변

cp -t /home/shantanu/tosend인수가 소스가 아니라 대상 디렉토리임을 알리기 위해 사용해야 합니다. 그런 다음 가능한 한 많은 파일을 한 번에 복사 -exec ... +하기 위해로 변경할 수 있습니다 cp.


답변

for i in $(ls); do cp -r "$i" "$i"_dev; done;


답변

그 오류의 이유는 -r 옵션이 필요한 폴더를 cp Thanks에 복사하려고하기 때문입니다.


답변