是否可以将结果find传递给COPY命令cp?
像这样:
find . -iname "*.SomeExt" | cp Destination Directory
Run Code Online (Sandbox Code Playgroud)
寻求,我总是找到这样的公式,如从这篇文章:
find . -name "*.pdf" -type f -exec cp {} ./pdfsfolder \;
Run Code Online (Sandbox Code Playgroud)
这提出了一些问题:
|烟斗?这不是它的用途吗?-exec|?当我"找到50local.policy | xargs vim"时,我收到错误"Vim:Warnung:Die Eingabe kommt nicht von einem Terminal"(翻译:Vim:警告:输入不是来自终端).
我可以用vim成功编辑但是在我关闭之后我的终端表现得很奇怪(我不能输入字母,当我点击进入shell提示只是重复.当我用"xargs gedit"做它时它不会产生那些问题.
我使用Ubuntu 11.10与Gnome 3和Gnome-Terminal 3.0.1.
我想做类似的事情:
find . -type f | xargs cp dest_dir
Run Code Online (Sandbox Code Playgroud)
但是xargs将dest_dir用作初始论证,而不是最终论证.我想知道:
xargs?一个可能的,但繁琐的替代方案是:
find . -type f | while read f ; do echo cp $f dest_dir ; done
Run Code Online (Sandbox Code Playgroud)
我不喜欢这个,因为cp会启动几十个进程.
我想在Linux上将所有文件作为单个参数传递,但我无法做到这一点.
这很有效
ls | sort -n | xargs -i pdftk {} cat output combinewd2.pdf
Run Code Online (Sandbox Code Playgroud)
这会为每个命令传递一个参数,但我希望所有命令都在一个命令中.
这是我的问题
$ echo 'for i in $@; do echo arg: $i; done; echo DONE' > /tmp/test.sh
$ echo "ac\nbc\ncc\n" | xargs bash /tmp/test.sh
arg: ac
arg: bc
arg: cc
DONE
Run Code Online (Sandbox Code Playgroud)
这是我所期待的,但是
$ echo "ac s\nbc s\ncc s\n" | xargs -d \n bash /tmp/test.sh
arg: ac
arg: s
arg: bc
arg: s
arg: cc
arg: s
DONE
Run Code Online (Sandbox Code Playgroud)
输出不应该是?
arg: ac s
arg: bc s
arg: cc s
DONE
Run Code Online (Sandbox Code Playgroud)
如何使用xargs获得第二个输出?
我正在尝试重命名当前目录中的所有文件,以便大写名称转换为更低.我试着这样做:
ls -1|gawk '{print "`mv "$0" "tolower($0)"`"}'|xargs -i -t eval {}
Run Code Online (Sandbox Code Playgroud)
我在目录中有两个文件,Y和YY -t添加用于调试,输出为:
eval `mv Y y`
xargs: eval: No such file or directory
Run Code Online (Sandbox Code Playgroud)
如果我自己执行eval,它会工作并将Y移动到y.
我知道还有其他方法可以实现这一目标,但如果可以的话,我想让它工作!干杯
我想在从stdin提供URL时下载网页.基本上一个进程连续生成stdout/file的URL,我想将它们管道输出到wget或curl.(如果您愿意,可以将其视为简单的网络爬虫).
这似乎工作正常:
tail 1.log | wget -i - -O - -q
Run Code Online (Sandbox Code Playgroud)
但是当我使用'tail -f'并且它不再起作用时(缓冲或wget正在等待EOF?):
tail -f 1.log | wget -i - -O - -q
Run Code Online (Sandbox Code Playgroud)
任何人都可以使用wget,curl或任何其他标准Unix工具提供解决方案吗?理想情况下,我不想在循环中重新启动wget,只是让它继续运行下载URL.
我的网站代码使用这段代码在服务器(Ubuntu)上自动部署.
cmd = 'cd ' + checkout_dir + ' && ' + svn_command + " st | awk '{print $2}' | grep -v ^deploy | tac | xargs -r" + svn_command + " revert -R && " + svn_command + ' up -r ' + options.revision
这个命令做的是cd进入checkout目录,运行svn status,然后提取filename($2),deploy从列表中删除目录及其所有文件(我不想还原它).如果没有参数,它不会运行svn revert命令,否则它会运行.
不幸的是,xargs -r它在我的机器上不起作用(Mac OS X 10.8).所以我被困在这里,任何人都可以帮忙吗?
我正在运行这样的命令行:
filename_listing_command | xargs -0 action_command
Run Code Online (Sandbox Code Playgroud)
在哪里filename_listing_command使用空字节来分隔文件 - 这就是xargs -0想要消费的东西.
问题是我想过滤掉一些文件.像这样的东西:
filename_listing_command | sed -e '/\.py/!d' | xargs ac
Run Code Online (Sandbox Code Playgroud)
但我需要用xargs -0.
如何将sed想要的行分隔符从换行符更改为NUL?
我试图传递一个文件路径数组,xargs将它们全部移动到一个新的位置.我的脚本目前的工作方式如下:
FILES=( /path/to/files/*identifier* )
if [ -f ${FILES[0]} ]
then
mv ${FILES[@]} /path/to/destination
fi
Run Code Online (Sandbox Code Playgroud)
将FILES作为数组的原因是因为if [ -f /path/to/files/*identifier* ]如果通配符搜索返回多个文件,则失败.仅检查第一个文件,因为如果存在任何文件,将执行移动.
我想,以取代mv ${FILES[@]} /path/to/destination与传递线路${FILES[@]}到xargs移动的每个文件.我需要使用,xargs因为我希望有足够的文件来重载单个mv.通过研究,我只能找到移动文件的方法,我已经知道哪些文件再次搜索文件.
#Method 1
ls /path/to/files/*identifier* | xargs -i mv '{}' /path/to/destination
#Method 2
find /path/to/files/*identifier* | xargs -i mv '{}' /path/to/destination
Run Code Online (Sandbox Code Playgroud)
${FILES[@]}给xargs?以下是我尝试过的方法及其错误.
尝试1:
echo ${FILES[@]} | xargs -i mv '{}' /path/to/destination
Run Code Online (Sandbox Code Playgroud)
错误:
mv: cannot stat `/path/to/files/file1.zip /path/to/files/file2.zip /path/to/files/file3.zip /path/to/files/file4.zip': …Run Code Online (Sandbox Code Playgroud)