gpt4 book ai didi

arrays - 使用 `ls --ignore` 的数组

转载 作者:行者123 更新时间:2023-12-04 18:37:28 29 4
gpt4 key购买 nike

我正在为我的服务器备份编写一个 bash 脚本。
基于我的网络根目录(/home),我想过滤我的网络目录排除一些将军。
我找到了 --忽略选择它。这是我的代码,用于返回我想要的东西。

DIR_LIST=`ls -al $WWW_ROOT --ignore={.,..,ubuntu,test} | grep "^d" | awk '{ print $9 }'`
echo $DIR_LIST;

但是当我尝试使用数组时,它的效果并不好。
EXCLUDED=(. .. test ubuntu)
STR=$(IFS=,; echo "${EXCLUDED[*]}")
DIR_LIST=`ls -al $WWW_ROOT --ignore={$STR} | grep "^d" | awk '{ print $9 }'`
echo $DIR_LIST;

echo $STR 效果很好,但是 echo $DIR_LIST 不是。
我认为大括号不能正常工作。

我怎样才能按预期做到这一点?

最佳答案

这是不使用 ls 的一种方法更糟糕的是,您正在使用 -al旗帜。

#!/usr/bin/env bash

shopt -s nullglob extglob

files=(/path/to/www/directory/!(ubuntu|test)/)

declare -p files

这将向您显示数组分配中的文件。

如果要遍历文件并从文件名中删除路径名,而不使用 shell 中的任何外部命令。
for f in "${files[@]}"; do echo "${f##*/}"; done 

使用 basename 时结果相同
for f in "${files[@]}"; do var=$(basename "$f"); echo "$var"; done 

或者只是在数组中执行
printf '%s\n' "${files[@]##*/}"
"${files##*/}"是 P.E. 的一种形式。参数扩展。

有一个在线 bash 手册,您可以在其中查找 P.E.见 Parameter Expansion

或手册页。见 PAGER='less +/^[[:space:]]*parameter\ expansion' man bash
查找 nullglobextglobshell globbing

名为 files 的数组现在有了您感兴趣的数据/文件。

默认情况下不会列出点文件,因此您不必担心,除非 dotglob已启用,默认情况下处于关闭状态。

关于arrays - 使用 `ls --ignore` 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60255098/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com