我尝试编写一个 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
- 该
read line </dev/tty
命令正在从终端(即键盘)读取一行。如果您不想这样做,请删除该命令。 - 除此之外,循环似乎运行良好吗? (乍一看,对我来说看起来相当不错。)如果没有,请编辑您的问题以说明发生了什么。
-name '*.*'
表示仅查看名称包含句点(又名“点”,.
)。如果要排除其名称的文件不包括一个.
(如data
和README
),那么这就是完美的方法。但如果你想处理全部文件,省略该-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"