bash - 如何从 bash 中的文件中读取文件名列表?

标签 bash scripting

我正在尝试编写一个 bash 脚本来处理一系列文件,这些文件的名称在输入文件中每行存储一个,类似于

find . -type f -mtime +15 > /tmp/filelist.txt
for F in $(cat /tmp/filelist.txt) ; do
  ...
done;

我的问题是 filelist.txt 中的文件名可能包含空格,所以上面的片段会扩展行

my text file.txt

到三个不同的文件名,mytextfile.txt。我该如何解决?

最佳答案

使用读取:

while read F  ; do
        echo $F
done </tmp/filelist.txt

或者使用 IFS 更改 shell 分隔列表的方式:

OLDIFS=$IFS
IFS="
"
for F in $(cat /tmp/filelist.txt) ; do
  echo $F
done
IFS=$OLDIFS

或者(如@tangens 所建议),将循环主体转换为单独的脚本,然后使用 find 的 -exec 选项运行如果直接找到的每个文件。

关于bash - 如何从 bash 中的文件中读取文件名列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1688999/

相关文章:

ruby - rvm system-wide install : Warning! PATH 未正确设置

mysql - PostgreSQL 多个 CSV 导入并向每列添加文件名

python - 尝试通过脚本在 Spotfire 中打开和关闭显示/隐藏项目过滤器

linux - 定义每次使用时要评估的 bash 变量

bash - Shell脚本对编码和行尾敏感吗?

windows - Cygwin:创建 Windows 通知并在单击通知时聚焦程序

linux - 使用 shell 脚本在 Unix 中搜索文本文件

正则表达式根据旁边的内容在 powershell 中选择正确的时间

scripting - 无线 HTA 中的 DAO 与 ADO

scripting - 用于开发目的的虚拟 SMTP 服务器