Macos 如何在osx上忽略ls
我尝试在OSX上执行以下操作:Macos 如何在osx上忽略ls,macos,bash,ls,Macos,Bash,Ls,我尝试在OSX上执行以下操作: ls-lR——忽略*.app 这样我就可以递归搜索除.app文件夹之外的所有文件夹 然而,达尔文似乎没有忽略或隐藏选项 也许是一个递归搜索给定集合的一个文件夹深度的脚本,由于输出的格式,我不确定我不能通过管道ls-lR进行任何操作: ./ROOT/Applications/Some_app: drwxr-xr-x 3 admin root 102 26 Jun 11:03 app-bundle.app #<- WANT THIS drwxr-xr-
ls-lR——忽略*.app
这样我就可以递归搜索除.app文件夹之外的所有文件夹
然而,达尔文似乎没有忽略或隐藏选项
也许是一个递归搜索给定集合的一个文件夹深度的脚本,由于输出的格式,我不确定我不能通过管道ls-lR
进行任何操作:
./ROOT/Applications/Some_app:
drwxr-xr-x 3 admin root 102 26 Jun 11:03 app-bundle.app #<- WANT THIS
drwxr-xr-x@ 24 admin root 816 26 Jun 11:24 folder #<- WANT THIS
./ROOT/Applications/Some_app/app-bundle.app: #<- DON'T WANT
drwxr-xr-x 7 admin root 238 26 Jun 11:03 Contents #<- DON'T WANT
...
/ROOT/Applications/Some\u app:
drwxr-xr-x 3管理员根目录102 26 Jun 11:03 app-bundle.app#使用查找:
find . -ls -name '*.app' -prune
在bash中,可以使用扩展的globbing排除模式
shopt -s extglob # this must be on its own line
echo !(*.app) # match everything except for the given pattern
如果您有bash版本4或更高版本,那么可以使用globstar递归地执行此操作
shopt -s globstar
shopt -s extglob
echo **/!(*.app)
另一种方法是通过管道连接到grep:
ls | grep-v查找!!羞愧地垂着头就像一个符咒。谢谢你(等待回答延迟)你的第二次迭代好多了。再考虑一下,它可以做得更简单。总是-ls。如果是应用程序,-prune.find-ls-name'*.app'-prune | sed-n的//^[0-9]**[0-9]*//p'
非常完美!玩了一段时间后,您只需确保将最后的/
退出搜索path@hoss-仅在bash v4或更高版本上使用globstar。添加到回答中,这是一个非常好且优雅的解决方案。事实上,非常优雅的.osx 10.8.5有bash--version=3.2.48。不确定这是否能解决不希望在递归列表中遍历.app目录的问题。如果我使用了ls-R | grep-v“.app”
我最终会得到除.app目录之外的所有文件,但包括所有子文件和文件夹。如果终端较宽且文件名较短,这将不起作用——它将排除许多与模式不匹配的文件。实际上,这是可以挽救的——使用1
选项来ls
强制每行一个文件