我正在使用 rsync 和标志-nPaAXz ~/
来检查要复制哪些文件。
这太冗长了,无法理解。
如何过滤输出以便查看将复制到一定深度的文件/文件夹列表,例如:
1 个文件夹深
/home/afile
/home/afolder/
/home/anotherfolder/
2 个文件夹深
/home/afile
/home/afolder/afile
/home/afolder/anotherfile
/home/afolder/afolder/
/home/anotherfolder/afile
答案1
以下 grep 将 rsync 的详细输出限制为 2 个文件夹的深度:
rsync -nPaAXz src_dir dst_dir | grep -E '^/?([^/]+/?){0,2}$'
{0,2}
将上面的内容更改为{0,3}
以过滤掉 3 个文件夹。{0,4}
将过滤掉 4 个文件夹深度等。
答案2
此命令获取每个路径并将其截断到n
深层文件夹(在\{0,n\}
命令部分sed
和{0,n}
grep 命令部分中定义)。然后将其通过管道输入uniq
以过滤掉重复项。
rsync -nPaAXz src_dir dst_dir | sed -n 's@^\(\([^/][^/]*/\)\{0,2\}\).*@\1@p' | uniq
使用以下方法也可以实现同样的效果grep
:
rsync -nPaAXz src_dir dst_dir | grep -oE "^([^/]+/){0,2}"
尽管由于以下原因,上述内容不适用于GNU grep
版本< 2.5.3
漏洞。
答案3
在这种情况下,您只想过滤输出,实际上并不关心以任何方式重用这些值。那么这很简单:只需 grep 出包含比您想要的更多斜杠的行即可。
答案4
rsync -nPaAXz src_dir dst_dir | cut -d "/" -f 1-4 | awk '!x[$0]++'
cut 删除 4 个文件夹深度路径之后的所有内容,awk 删除重复项。