检查目录中是否存在某种文件类型/扩展名

Wur*_*zer 62 linux bash shell

你会怎样用bash来判断某个目录中是否存在特定扩展名的文件?

就像是

if [ -e *.flac ]; then 
echo true; 
fi 
Run Code Online (Sandbox Code Playgroud)

Jer*_*eir 80

#!/bin/bash

count=`ls -1 *.flac 2>/dev/null | wc -l`
if [ $count != 0 ]
then 
echo true
fi 
Run Code Online (Sandbox Code Playgroud)

  • 并且,这个答案不是解析输出,它只是计算行输出,我几乎可以肯定,即使文件名中有奇怪的字符,`ls -1`将打印每个文件一行 (7认同)
  • 嘿托马斯,如何为问题添加更好的解决方案,而不仅仅是一个downvote. (6认同)
  • 托马斯,你为什么不使用它的例子是使用`ls -l`,我的答案使用`ls -1` (5认同)
  • 那么请告诉我们,文件名中必须有什么神奇的字符才能使该行无效? (3认同)
  • 为什么不应该解析ls的输出http://mywiki.wooledge.org/ParsingLs (2认同)
  • 计数行 _is_ 解析。如果任何文件包含`\n`(是的,它在文件名中有效),它将返回一个不正确的数字。 (2认同)
  • 也许有点晚了,但为了完整起见,`find . -最大深度 1 -类型 f -名称 *.flac | wc-l`。这符合 ShellCheck SC2012。 (2认同)

wkl*_*wkl 20

#/bin/bash

myarray=(`find ./ -maxdepth 1 -name "*.py"`)
if [ ${#myarray[@]} -gt 0 ]; then 
    echo true 
else 
    echo false
fi
Run Code Online (Sandbox Code Playgroud)

  • 这个很好,因为你可以在找到它们之后用文件做*. (4认同)

fra*_*ser 13

这使用ls(1),如果不存在flac文件,则ls报告错误并退出脚本; 此外,脚本继续并且可以处理文件

#! /bin/sh
ls *.flac  >/dev/null || exit
## Do something with flac files here
Run Code Online (Sandbox Code Playgroud)

  • 为了额外的沉默,重定向2>&1. (4认同)
  • if版本:`if ls*.flac>/dev/null 2>&1; 然后...... fi;` (4认同)

Pau*_*ce. 9

shopt -s nullglob
if [[ -n $(echo *.flac) ]]    # or [ -n "$(echo *.flac)" ]
then 
    echo true
fi
Run Code Online (Sandbox Code Playgroud)