从路径名扩展结果中排除目录

hai

我有100个目录,需要将不在某个列表中的目录移动到一个新目录中。

我正在尝试以下变化:

for A in !(sub-9002 sub-9003 sub-9004 sub-9005 sub-9008 sub-9009 sub-9011 sub-9014 sub-9018 sub-9020 sub-9023 sub-9025 sub-9026 sub-9028 sub-9029 sub-9033 sub-9034 sub-9036 sub-9038 sub-9039 sub-9040 sub-9041 sub-9042 sub-9045 sub-9046 sub-9047 sub-9048 sub-9049 sub-9055 sub-9058 sub-9061 sub-9062 sub-9064 sub-9065 sub-9068 sub-9069 sub-9071 sub-9072 sub-9079 sub-9080 sub-9081 sub-9084 sub-9085 sub-9086 sub-9087 sub-9088 sub-9089 sub-9092 sub-9093 sub-9094 sub-9096 sub-9098 sub-9100);
do 
   mv -f $A Bad/;
done

我也在尝试:

if [[! A in (sub-9002 sub-9003 sub-9004 sub-9005 sub-9008 sub-9009 sub-9011 sub-9014 sub-9018 sub-9020 sub-9023 sub-9025 sub-9026 sub-9028 sub-9029 sub-9033 sub-9034 sub-9036 sub-9038 sub-9039 sub-9040 sub-9041 sub-9042 sub-9045 sub-9046 sub-9047 sub-9048 sub-9049 sub-9055 sub-9058 sub-9061 sub-9062 sub-9064 sub-9065 sub-9068 sub-9069 sub-9071 sub-9072 sub-9079 sub-9080 sub-9081 sub-9084 sub-9085 sub-9086 sub-9087 sub-9088 sub-9089 sub-9092 sub-9093 sub-9094 sub-9096 sub-9098 sub-9100)]]; then 
    mv -f $A Bad/;
fi
戈登·戴维森

您可以使用否定匹配扩展的glob模式,但是您需要先进行操作set -s extglob,然后模式语法为!(sub-9002|sub-9003|sub-9004|...)我还建议使用小写或混合大小写的变量名(有一堆具有特殊含义的全大写字母名,并且您不想意外地使用其中的一种),并且还应双引号引用变量(例如,"$a"而不是$a),以避免奇怪的解析问题。哦,您不需要在行尾使用分号。

shopt -s extglob
for a in !(sub-9002|sub-9003|sub-9004|sub-9005|sub-9008|sub-9009|sub-9011|sub-9014|sub-9018|sub-9020|sub-9023|sub-9025|sub-9026|sub-9028|sub-9029|sub-9033|sub-9034|sub-9036|sub-9038|sub-9039|sub-9040|sub-9041|sub-9042|sub-9045|sub-9046|sub-9047|sub-9048|sub-9049|sub-9055|sub-9058|sub-9061|sub-9062|sub-9064|sub-9065|sub-9068|sub-9069|sub-9071|sub-9072|sub-9079|sub-9080|sub-9081|sub-9084|sub-9085|sub-9086|sub-9087|sub-9088|sub-9089|sub-9092|sub-9093|sub-9094|sub-9096|sub-9098|sub-9100);
do 
   mv -f "$a" Bad/
done

顺便说一句,[[ ]]条件表达式没有像in运算符那样的东西但它们确实需要在[[和之后放置空格]]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章