xargs 이후에 cp가 작동하지 않습니다

xargs 이후에 cp가 작동하지 않습니다

저는 Host 64비트와 virtualbox 32비트에서 debian jessie를 실행하고 있습니다. 트래픽을 절약하기 위해 i386 패키지를 호스트 시스템에서 공유 폴더로 복사하여 virtualbox에서 사용할 수 있도록 했습니다.

My Hostname/var/cache/apt/archives$ ls -al /var/cache/apt/archives/ |
    grep 'i386' | 
    awk '{print $9}'
alsa-oss_1.0.28-1_i386.deb
gcc-4.9-base_4.9.2-10_i386.deb
i965-va-driver_1.4.1-2_i386.deb
libaacplus2_2.0.2-dmo2_i386.deb
libaio1_0.3.110-1_i386.deb
libasound2_1.0.28-1_i386.deb
libasound2-dev_1.0.28-1_i386.deb
libasound2-plugins_1.0.28-1+b1_i386.deb

내가 찾고 있는 패키지를 보여줍니다. 하지만 난 노력해CP그 후에매개변수

My Hostname/var/cache/apt/archives$ ls -al /var/cache/apt/archives/ |
    grep 'i386' |
    awk '{print $9}' |
    LANG=C xargs cp -u /home/alex/debian-share/apt-archives/
cp: target 'zlib1g_1%3a1.2.8.dfsg-2+b1_i386.deb' is not a directory

내가 뭘 잘못했는지 모르겠습니다. 이런 방법이 가능한가요?

문제는 스크립트를 작성할 수 없다는 것입니다. 이럴 수도 있지

for i in *_i386.deb ; do cp [option] full-path to shared-folder

나는 호스트를 엉망으로 만들고 싶지 않았기 때문에 그렇게 하지 않았습니다.

답변1

현재 문제를 어떻게 해결해야 하는지 이미 알고 계시더라도 질문에 답변해 드리겠습니다 xargs.

xargs명령의 끝에 문자열을 넣으십시오. 귀하의 경우에는 마지막 인수 앞에 해당 문자열이 필요합니다 cp. -I옵션을 사용하여 xargs명령을 구성합니다. 이와 같이:

ls /source/path/*pattern* | xargs -I{} cp -u {} /destination/path

이 예에서는 to를 {}대체 문자열로 사용하므로 구문이 비슷해 보입니다 find.

답변2

ls -al /var/cache/apt/archives/ |
    grep 'i386' | 
    awk '{print $9}'

다음과 같이 단순화될 수 있다/var/cache/apt/archives/*i386*


따라서 다음 두 가지 중 하나를 사용하십시오.

cp -u /var/cache/apt/archives/*i386* /home/alex/debian-share/apt-archives/

cp -ut /home/alex/debian-share/apt-archives/ /var/cache/apt/archives/*i386*

어디

   -t, --target-directory=DIRECTORY
          copy all SOURCE arguments into DIRECTORY


당신은 또한 볼 수 있습니다ls 구문 분석에 대한 정보

관련 정보