我在 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
我没有干,因为我不会弄乱我的Host。
答案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 的信息