如何链接'mimetype -b'和'find'命令以获取相同csv中的文件名和文件类型?



我想从目录结构中获取文件名、创建日期、修改日期和文件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命令的-exec选项,其中括号{}表示当前文件的名称。

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

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

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 $'' -f2; echo '"'; done

使用外壳";对于循环";,以对当前目录中的目录条目执行CCD_ 6。然后使用file获取mime类型,并将其管道传输到cut以仅获得mime类型(通过排除同样由file打印的文件名(。

stat的格式是我所要求的——文件名、上次更改日期、上次修改日期(都是ISO格式,但可以很容易地通过大写Z和Y将其设置为自epoch以来的UNIX秒(。

可用性:

  • file:如果您在Linux上,它可能是自己的软件包?但我猜应该预装在macOS上
  • bash/zsh:可在Linux和macOS上轻松访问
  • statcutcoreutils的一部分,因此应在大多数系统上预装

最新更新