【问题标题】:Bash- Checking what type of files exist in directoryBash-检查目录中存在什么类型的文件
【发布时间】:2018-01-10 18:31:27
【问题描述】:

我需要查找文件扩展名类型并将其显示在终端中的函数。我正在尝试使用命令find,但我不知道该怎么做。

例如,这是我目录的内容:music1.mp3; music2.mp3; document.txt; movie.avi; movie2.avi; movie3.avi

输出应如下所示:

 Available extensions: mp3, txt, avi

所以我不想准备一些特定的扩展,我想在目录中查找所有现有的扩展

【问题讨论】:

  • 这个问题与 StackOverflow 定义的编程无关。它可能更适合superuser.com 或其他 StackExchange 站点。使用 Q 底部的flag 链接并要求版主移动它。请不要在 2 个不同的网站上发布相同的 Q。 阅读stackoverflow.com/help/on-topicstackoverflow.com/help/how-to-askstackoverflow.com/help/dont-askstackoverflow.com/help/mcve,然后在此处发布更多问题。祝你好运
  • 欢迎来到 SO。发布您的代码,您已经完成的工作并阅读 [如何提问] (stackoverflow.com/help/how-to-ask)
  • 你想传递一个扩展名列表给这个函数,它会显示有这个扩展名的文件吗?
  • 如前所述,这更像是一个 unix/linux 问题而不是编程问题。这个问题也不清楚,所以当你在适当的地方转发时,请确保尽可能清楚。我有一个提示,你想要实现的目标可能是由piping to grep 完成的,但是阅读它我什至不完全理解你的目标是什么。
  • @glennjackman 问题已编辑,我希望现在一切都清楚了

标签: linux bash shell ubuntu


【解决方案1】:

使用find 命令:

find /path/to/your/folder/ -type f | sed -rn 's|.*/[^/]+\.([^/.]+)$|\1|p' | sort -u

在 OSX 上,将 -r 参数替换为 -E

【讨论】:

  • 你拯救了我的一天凯文!非常感谢!
【解决方案2】:

这仅报告包含点的非隐藏文件名:

declare -A ext
for f in *; do 
    e=${f##*.}
    [[ $f != "$e" ]] && ext[$e]=1
done
( IFS=,; echo "available extensions: ${!ext[*]}" )

这是等价的:

perl -MList::Util=uniq -E '
    opendir $d, ".";
    @ext = uniq map {/([^.]+$)/} grep {/^[^.].*[.]/} readdir $d;
    say "extensions: ", join ",", @ext
'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 2015-07-07
    • 2017-04-18
    相关资源
    最近更新 更多