用于将文件的元数据属性写入单独的文本文件的 Bash 脚本

用于将文件的元数据属性写入单独的文本文件的 Bash 脚本

我尝试编写一个 bash 脚本,该脚本循环遍历给定目录及其所有子目录,并使用命令将元数据属性提取mdls到单独的文本文件中。由于我有很多包含空格和其他特殊字符的文件名,因此我的代码库源自答案“循环遍历名称中带有空格的文件?“。但是在每个文件之后,脚本都会等待手动按下Enter/ Return

如何让它自动循环浏览文件和文件夹?

#!/bin/bash
# write metadata of files in separate file

find . -type f -name '*.*' -exec sh -c '
  for file do
    echo "$file"
    mdls "$file" > "$file"_metadata.txt
    read line </dev/tty
  done
' sh {} +

答案1

  1. read line </dev/tty命令正在从终端(即键盘)读取一行。如果您不想这样做,请删除该命令。
  2. 除此之外,循环似乎运行良好吗? (乍一看,对我来说看起来相当不错。)如果没有,请编辑您的问题以说明发生了什么。
  3. -name '*.*'表示仅查看名称包含句点(又名“点”,.)。如果要排除其名称的文件包括一个. (如dataREADME),那么这就是完美的方法。但如果你想处理全部文件,省略该-name子句 — find 默认情况下查找所有文件;-type f、、 等子句都指定了搜索的限制(即排除)。-name something-mtime value

答案2

find /path/to/Users/myuser -type f -print0 | 
xargs -0 -I% sh -c "mdls "%" > "%"_metadata.txt"

相关内容