【问题标题】:Using find command to grab the file extensions in directory in shell script [duplicate]使用 find 命令在 shell 脚本中获取目录中的文件扩展名 [重复]
【发布时间】:2021-06-25 17:47:27
【问题描述】:

到目前为止我已经尝试过

extension=$(find /home/path-to-dir -type f -name '*.*' | sed 's/^.*\.//' | sort -u)

它在. 之后给了我扩展名,但text.data.json 失败了(我只需要json)

类似的例子stack/~.hello.py(我只需要py)


我也在尝试查找文件的创建日期?有可能吗?

【问题讨论】:

  • 对一个问题只有一个问题,请 - 创建日期应单独询问(答案取决于您使用的文件系统,但通常答案是否定的,这是不可能的——典型的 UNIX 文件系统只存储最后修改时间)。
  • 除此之外...一般来说,使用字符串变量来存储事物列表并不是一个好主意——列表应该存储在数组中。这样你就可以询问数组中有多少东西,按数字引用它们等等。
  • 我很惊讶,但是,您当前的正则表达式 没有 一直剥离到最后。它们默认是贪婪的,sed 没有提供关闭它的方法——如果你运行echo 'foo.bar.baz' | sed 's/^.*\.//',你只会得到baz,而不是bar.baz。你能提供一个minimal reproducible example 让其他人看到你的问题吗?
  • 可以使用:for i in *;do [[ -f $i ]] && echo ${i##*.};done|sort -u

标签: linux bash shell sh ksh


【解决方案1】:

作为sed命令的替代,我们可以使用parameter expansion来获取last.之后的字符串;

find /home/path-to-dir -type f -name '*.*' -exec bash -c 'echo ${0##*.}' {} \;

小例子:

--> ls
ahahha~bla.py  bla.bla.json  ok.py  test.json  text.data.json
-->
-->
--> find . -type f -name '*.*' -exec bash -c 'echo ${0##*.}' {} \; | sort -u
json
py

Extract filename and extension in Bash

【讨论】:

  • 这看起来不错,但我们可以通过获取唯一值来增强它
  • 对不起,完全忘了sort,我已经添加了!
  • 你知道如何在 linux 中查找文件的创建日期吗?有可能吗?
  • 当然可以得到创建日期。但是,这超出了您当前问题的范围。看看here
【解决方案2】:

用这个我解决了它

find . -type f -name "[^.]*.*" -exec bash -c 'printf "%s\000" "${@##*.}"' argv0 '{}' + | sort -uz | tr '\0' '\n'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 2015-05-24
    • 2018-04-29
    • 2014-02-18
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多