从 ls 找到的文件中排除某些文件

exclude certain files from files found by ls

在我的当前目录中有一些文件和文件夹,例如:

data
log.txt
info.txt
process_data.sh

如何从 ls 输出中排除目录 data 和文件 log.txt

我试过: ls |grep -v data |grep -v log.txt 但是此命令还排除了 process_data.sh,因为 data 出现在其名称中。

我试过: ls --ignore="data" 简单地先尝试排除 data,但收到错误:

ls: illegal option -- -
usage: ls [-@ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1%] [file ...]

这可能表明 --ignore 在我的 OS 中不合法。我正在使用 mac.

您可以将 ls 的输出通过管道传输到 PerlAwk:

ls | perl -ne 'print unless /\bdata\b/ or /log.txt/'

ls | awk '!/\<data\>/ && !/log.txt/'

(在您的 Awk 版本中,此 awk 命令有可能无法按预期工作。在这种情况下,只需使用 Perl。)

编辑:有一种方法可以用 grep 做到这一点:

ls | grep -Ewv 'data|log.txt'

我建议使用 loop 遍历目录中的文件,而不是使用最不可靠的“ls”输出(例如“for f in *; do grep ..完成)。

但要忠于您的实际问题:grep 的 -w 标志(整个单词)和 -E 标志(扩展表达式)是你的朋友吗,应该帮助你精确的努力:

ls | grep -vw -E ‘data|log.txt’