用于移动包含文件的目录的Linux脚本

时间:2013-10-17 17:57:56

标签: linux bash scripting grep

Linux中的脚本非常新,所以我希望这很简单。如果该目录包含一个包含某段文本的文件,我需要将包含多个文件的目录移动到另一个位置。

我有一个命令,它给出了一个符合我标准的目录列表:

find . -name 'file.name' -print0 | xargs -0 grep -l "foo" | sed 's#\(.*\)/.*#\1#' | sort -u

现在我只需要获取结果并将它们与可执行脚本中的mv命令结合起来。

3 个答案:

答案 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