Cp
xargs 後的 cp 不起作用
我在 64 位主機和 32 位 virtualbox 上執行 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
顯示我正在尋找的包裹。但是他們我嘗試在xargs之後****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
我沒有乾,因為我不會弄亂我的主人。
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 的資訊
雖然您已經知道應該如何解決目前的問題,但我仍然會回答關於
xargs
.
xargs
將它得到的字元串放在命令的末尾,而在您的情況下,您需要在 . 的最後一個參數之前使用該字元串cp
。使用-I
選項xargs
來構造命令。像這樣:ls /source/path/*pattern* | xargs -I{} cp -u {} /destination/path
在此範例中,我使用
{}
to 作為替換字元串,因此語法類似於find
.