web-dev-qa-db-ja.com

xargsが動作しない後のcp

ホスト64ビットと仮想ボックス32ビットでdebian jessieを実行しています。トラフィックを節約するために、ホストから共有フォルダーにi386パッケージをcpして、virualboxで使用できるようにします。

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

探しているパッケージを表示します。しかし、私はcpxargsの後にそれらを試みます

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

私はホストを台無しにしないので、私は乾燥しませんでした。

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

/var/cache/apt/archives/*i386*に簡略化できます


したがって、次の2つのいずれかを使用します。

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の解析に関する情報

10
Sundeep

現在の問題をどのように解決すべきかはすでにご存じですが、xargsについては引き続きお答えします。

xargsは、取得した文字列をコマンドの最後に配置しますが、あなたの場合、cpの最後の引数の前にその文字列が必要です。 xargs-Iオプションを使用して、コマンドを作成します。このような:

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

この例では、置換文字列として{}を使用しているため、構文はfindのようになります。

26
aragaer