是否可以显示当前目录中所有文件名不以偶数开头且后跟任何字母的文件?

是否可以显示当前目录中所有文件名不以偶数开头且后跟任何字母的文件?

我正在尝试为专注于 Linux/Unix 的 COSC 课程回答这个问题。

我使用的是带有 bash shell 的 Linux。我是 9 月份才开始接触 Linux 的。

我的老师在本周的作业中提出了这个问题,根据课堂讨论,这个问题从被列入到被排除。在花了这么多时间之后,我真的很想搞定这个问题。

我提出的命令不考虑文件名是否以偶数开头,后跟另一个使用通配符的数字。这是问题是否包含在作业中的关键点,我花了几个小时试图解决这个问题。

这可能吗?

我想到了:

echo [!02468][a-zA-Z]*

欢迎并非常感谢任何建议。

答案1

您还可以执行以下操作

shopt -s extglob
echo !([02468][a-zA-Z]*)
shopt -u extglob

您需要先使用 启用它extglobshopt -s extglob之后
,您可以使用 再次禁用它shopt -u extglob

extglob shell 选项为您提供了命令行中更强大的模式匹配。

答案2

我认为用简单的命令不可能做到这一点。不过下面的命令应该可以解决问题:

for i in *; do
  case "$i" in
    [02468][a-zA-Z]*) ;; # do nothing
    *) echo "$i" ;;
  esac
done

答案3

下面应该可以解决问题

echo !([02468][a-zA-Z])

答案4

@Rik 的解决方案使用extglob可能是最好的方法bash。如果您需要一种与 shell 无关的方法(假设您使用 GNU find),请尝试以下方法:

find . -type f -not -name "[02468][a-zA-Z]*"

相关内容