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


0

我试图回答一个专注于Linux / Unix的COSC类的问题。

我正在使用Linux与bash shell。我是9月份的Linux新手。

我的导师在本周的作业中有这个问题,并且基于课堂讨论,它从包括在内,而不是包括在内。我花了很长时间才真正想要这个。

我提出的命令没有考虑文件的名称是否以偶数位开头,后跟另一位使用通配符的数字。这是问题被包括在或被排除在任务之外的关键点,我已经坐了好几个小时试图解决这个问题。

它甚至可能吗?

我提出了:

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

任何建议都受到欢迎和非常感谢。

Answers:


2

您还可以执行以下操作

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

您需要启用extglobshopt -s extglob第一。
之后你可以再次禁用它shopt -u extglob

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


0

我认为用简单的命令是不可能的。以下应该可以做到这一点:

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

我其实刚刚想出来的!回声[0-9] * | xargs echo [!02468] [a-zA-Z] *感谢您的回复。你让我以不同的方向思考!
Kelly La Morge 2013年

这根本不起作用。如果没有文件匹配[0-9] *,它将按字面传递给xargs并出现在输出中。像2.txt这样的文件会被遗漏。像11.txt这样的文件会被遗漏。
迈克尔苏尔曼2013年


0

@ Rik使用的解决方案extglob可能是最好的方法bash。如果你需要一个与shell无关的方式(假设你正在使用GNU find),试试这个:

find . -type f -not -name "[02468][a-zA-Z]*"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.