从 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
的输出通过管道传输到 Perl
或 Awk
:
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’
在我的当前目录中有一些文件和文件夹,例如:
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
的输出通过管道传输到 Perl
或 Awk
:
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’