Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何连锁';mimetype-b';和';查找';命令获取同一csv中的文件名和文件类型?_Linux_Bash_Find_Mime Types - Fatal编程技术网

Linux 如何连锁';mimetype-b';和';查找';命令获取同一csv中的文件名和文件类型?

Linux 如何连锁';mimetype-b';和';查找';命令获取同一csv中的文件名和文件类型?,linux,bash,find,mime-types,Linux,Bash,Find,Mime Types,我想从目录结构中获取文件名、创建日期、修改日期和文件mime类型。我制作了一个脚本,内容如下: #!/bin/bash output="file_list.csv" ## columns echo '"File name";"Creation date";"Modification date";"Mime type"' > $output ## content find $1 -type

我想从目录结构中获取文件名、创建日期、修改日期和文件mime类型。我制作了一个脚本,内容如下:

#!/bin/bash
output="file_list.csv"

## columns
echo '"File name";"Creation date";"Modification date";"Mime type"' > $output

## content
find $1 -type f -printf '"%f";"%Tc";"%Cc";"no idea!"\n' >> $output
这给了我令人鼓舞的结果:

"File name";"Creation date";"Modification date";"Mime type"
"Exercice 4 Cluster.xlsx";"ven. 27 mars 2020 10:35:46 CET";"mar. 17 mars 2020 19:14:18 CET";"no idea!"
"Exercice 5 Bayes.xlsx";"ven. 27 mars 2020 10:36:30 CET";"ven. 20 mars 2020 16:18:54 CET";"no idea!"
"Exercice 3 Régression.xlsx";"ven. 27 mars 2020 10:36:46 CET";"mer. 28 août 2019 17:21:10 CEST";"no idea!"
"Archers et Clustering.xlsx";"ven. 27 mars 2020 10:37:34 CET";"lun. 16 mars 2020 14:12:05 CET";"no idea!"
...
但我遗漏了一件重要的事情:如何获取mime类型的文件?如果我可以在使用“find”命令找到的每个文件上链接命令“mimetype-b”,并将其写入方便的列中,那就太好了

提前感谢,

Cyril

您可以尝试使用find命令的选项,其中括号
{}
表示当前文件的名称

然后,您可以在附加到现有文件时删除新行:AFAIK默认行为会自动将新内容附加到新行,因此不需要
\n

最后,您希望在mimetype之后有一个结束引号,因此您不仅应该使用
-b
选项,还应该使用该选项,它将使您能够更好地控制要显示的内容。 因此,脚本的第三个命令应如下所示:

find $1 -type f -printf '"%f";"%Tc";"%Cc";"' -exec mimetype --output-format %m\" {} \; >> $output

这就是我想到的:

for entry in *; do stat --printf='"%n";"%z";"%y";"' $entry; file -00 --mime-type $entry | cut -d $'\0' -f2; echo '"'; done
使用shell“for循环”,对当前目录中的目录项执行
stat
。然后使用
文件
获取mime类型,并将其管道化到
剪切
以仅获取mime类型(通过排除文件名,该文件名也由
文件
打印)

stat
的格式是我认为需要的格式——文件名、上次更改日期、上次修改日期(都是ISO格式,但可以通过上框Z和Y轻松地设置为UNIX秒,从epoch开始)

可用性:

  • 文件
    :如果您在Linux上,可能是它自己的包?但我猜应该预装在macOS上
  • bash/zsh
    :在Linux和macOS上都可以轻松访问
  • stat
    cut
    :so的一部分应该预先安装在大多数系统上

谢谢corbin-c,它工作正常;-)
--output format%m\“
的诀窍非常棒,它消除了我在处理每行末尾的一个“缺失”时的痛苦。。。再次感谢您的完美工作,50代表的悬赏是给您的!