使用find命令在shell脚本中获取目录中的文件扩展名

15 浏览
0 Comments

使用find命令在shell脚本中获取目录中的文件扩展名

到目前为止,我已经尝试了下面这段代码:

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

它给出的是以.为分隔的扩展名,但对于text.data.json这样的文件会失败(我只需要json)。

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


另外,我还在尝试找到一个文件的创建日期,是否有可能实现?

0
0 Comments

使用find命令在shell脚本中查找目录中的文件扩展名的问题是因为需要获取文件名中的扩展名,并且希望结果中只包含唯一的值。解决方法是使用参数展开来获取最后一个句点后面的字符串,并使用sort命令来获取唯一的值。

下面是解决问题的代码示例:

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

这个命令会在指定的目录中查找所有的文件,并输出每个文件的扩展名。然后使用sort命令对输出进行排序,并使用-u选项去除重复的值,最终得到唯一的文件扩展名列表。

通过这个方法,我们可以方便地获取目录中所有文件的扩展名,并且可以对结果进行排序和去重。这对于需要统计文件类型或者进行文件分类的操作非常有用。

如果想要获取文件的创建日期,可以使用其他方法来实现。然而,这超出了当前问题的范围。可以参考这里的链接来了解如何在Linux中获取文件的创建日期:[How to get file creation date/time in Bash Debian](https://stackoverflow.com/questions/14842195)

0
0 Comments

问题出现的原因是需要在shell脚本中使用find命令来获取目录中的文件扩展名。解决方法是使用下面的shell脚本代码:

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

这段代码的作用是在当前目录(.)中查找所有的文件(-type f),然后使用-name参数来筛选出文件名中包含扩展名的文件。接着使用-exec参数来执行一段bash命令,该命令使用printf函数打印出文件的扩展名,其中"${@##*.}"表示截取文件名中的扩展名部分。最后使用sort命令和tr命令来对输出进行排序和格式化处理,将空字符替换成换行符,以便于阅读。

通过使用这段shell脚本代码,我们可以方便地获取目录中的文件扩展名,从而进行后续的处理或分析。

0