Bash SSH命令,用于在除少数指定目录之外的目录中循环
是否可以通过SSH执行bash命令,该命令在多个目录(我指定的3或4除外)上循环?比如: 删除Bash SSH命令,用于在除少数指定目录之外的目录中循环,bash,loops,ssh,Bash,Loops,Ssh,是否可以通过SSH执行bash命令,该命令在多个目录(我指定的3或4除外)上循环?比如: 删除/home/中除/home/exception1/、/home/exception2/和/home/exception3/以外的所有目录的public\u html/oplated/ 我使用的是HostGator专用Linux服务器。这里有一个简单的解决方案-可能有更好的方法来实现这一点 cd /home ls */public_html/outdated 我会告诉你所有这些;您可以使用grep-v从
/home/
中除/home/exception1/
、/home/exception2/
和/home/exception3/
以外的所有目录的public\u html/oplated/
我使用的是HostGator专用Linux服务器。这里有一个简单的解决方案-可能有更好的方法来实现这一点
cd /home
ls */public_html/outdated
我会告诉你所有这些;您可以使用grep-v从中删除行
ls */public_html/outdated | grep -Ev ^exception1/ | grep -Ev ^exception2/ | grep -Ev ^exception3/
然后使用反勾号将它们输入rm-rf
rm -rf `ls */public_html/outdated | grep -Ev ^exception1/ | grep -Ev ^exception2/ | grep -Ev ^exception3/`
显然,在实际删除列表之前,您应该运行中间步骤来验证列表
请注意,如果您的任何目录中都有空格,这可能不起作用-尽管/home中的用户名不应该有空格。安全的方法是使用
find
。(可能有一种方法可以用find进行排除,但我永远记不起来了。)这是一行,但为了可读性,我在这里将其拆分
find /home
\( -wholename '/home/exception1'
-o -wholename '/home/exception2'
-o -wholename '/home/exception3' \)
-prune -o
-wholename '*/public_html/outdated' -type d
-exec rm -rvf \{} \;
在运行此命令之前,我强烈建议替换-exec rm-rvf\{}代码>位与-打印,以验证它是否只打印您要删除的内容。
它的工作原理如下:find
递归地查找内容。\(
..\)中的内容与要完全跳过的目录匹配(即:prune)。使用
-prune的标准模式是先说出要删掉的内容,然后说出实际要匹配的内容
我们希望匹配public\u html/outleted
目录,这就是-wholename'*/public\u html/outleted'-type d
的用途。(-type d
表示“是一个目录”)
最后是我们想要执行的操作。再次用-print
替换此部件,直到您确定它符合您的要求
一个警告:这将抛出一系列警告:
find: `/home/foo/public_html/outdated': No such file or directory
这是因为find正在尝试进入它刚刚删除的目录。您可以安全地忽略这些内容——尽管有警告,查找仍将继续。先测试
shopt -s extglob
rm -rf /home/!(exception1|exception2|exception3)/public_html/outdated/
您可能不想在public\u html/outleted/
上使用斜杠。您是对的,谢谢@Dennis Williamson我更正了它。您可以尝试使用-execdir
而不是-exec
以及-depth
来查看是否可以消除错误消息。@Dennis我没有尝试过execdir,但是我确实玩过-depth
,认为它可能会解决问题(就像我们删除子树时所做的那样)。这似乎完全打破了修剪,但是,所以我放弃了这种方法。这是华丽和直接的。我不确定您是否需要重复异常列表中的home
目录。至少在我把它改成只(exception1 | exception2 | exception3)
之前它对我不起作用。我还需要执行shopt-s extglob
来获取代码>操作员开始工作,但现在工作得很好。对不起,我只是从你的问题中复制和粘贴而没有思考。另外,很抱歉我忘了提到extglob
。我会更正我的答案。