Linux中的脚本非常新,所以我希望这很简单。如果该目录包含一个包含某段文本的文件,我需要将包含多个文件的目录移动到另一个位置。
我有一个命令,它给出了一个符合我标准的目录列表:
find . -name 'file.name' -print0 | xargs -0 grep -l "foo" | sed 's#\(.*\)/.*#\1#' | sort -u
现在我只需要获取结果并将它们与可执行脚本中的mv命令结合起来。
答案 0 :(得分:3)
您可以使用xargs
替换来获得所需的效果:
commands to get directory list | xargs -i mv "{}" <destination>
答案 1 :(得分:2)
假设您发布的所有管道都是目录名称:
$target=/home/me/example
find . -name 'file.name' -print0 |
xargs -0 grep -l "foo" |
sed 's#\(.*\)/.*#\1#' |
while read line #line is a variable with the contents of one line
do
mv $line $target
done
哦,摆脱排序-u 没有必要移动目录并且它“序列化”你的管道,你不能排序直到找到完成所以移动没有开始,没有它移动可以像SOON一样开始找到第一项。
答案 2 :(得分:0)
backtick operator评估命令并放置stdout
,就像您在命令行输入命令一样。所以,在你的情况下:
mv `find . -name 'file.name' -print0 | xargs -0 grep -l "foo" | sed 's#\(.*\)/.*#\1#'` target