Bash从文本文件读取文件名并进行处理
时间:2020-01-09 10:37:24 来源:igfitidea点击:
我需要从名为input.txt的文本文件中读取文件名列表,并对每个文件进行处理。
如何从文本文件读取文件名,并在每个文件上说运行/bin/foo命令?
如何从文本文件读取文件名并对这些文件采取某些措施?
简介通常,您需要逐行读取文件并处理数据。
对于Linux和Unix sysadmin shell脚本,这是一项非常常见的任务。
您需要使用bash while循环和read命令。
Bash从文本文件读取文件名
从文本文件读取文件名的语法如下:
while IFS= read -r file; do echo "Do something on $file ..." done < "filenames.txt"
或者
input="data.txt" while IFS= read -r file; do printf '%s\n' "$file" done < "$input"
使用bash while循环从文本文件读取文件名
让我们使用cat命令或vim命令在每行上创建一个名为input.txt的新文件,文件名在每一行:
cat > input.txt
追加数据:
foo.txt bar.txt delta.jpg theitroad.logo.png sales.pdf /etc/resolv.conf /home/Hyman/Documents/fy-19-2020.ods #/home/Hyman/Documents/yearly-sales-data.ods
相关:如何从Bash Shell提示符在Linux中创建文件
这是一个bash shell脚本示例,用于逐行读取文件:
#!/bin/bash # Name - script.sh # Author - Hyman Gite under GPL v2.x+ # Usage - Read filenames from a text file and take action on $file # --------------------------------------------------------------- set -e in="${1:-input.txt}" [ ! -f "$in" ] && { echo "./script.sh- File $in not found."; exit 1; } while IFS= read -r file do echo "Working on $file ..." done < "${in}"
简单运行如下:
#!/bin/bash # Name - script.sh (bash read file names list from file) # Author - Hyman Gite under GPL v2.x+ # Usage - Read filenames from a text file and take action on $file # --------------------------------------------------------------- set -e in="${1:-input.txt}" [ ! -f "$in" ] && { echo "##代码## - File $in not found."; exit 1; } while IFS= read -r file do ## avoid commented filename ## [[ $file = \#* ]] && continue echo "Running rm $file ..." done < "${in}"
也可以忽略以#开头的文件名
这是脚本的更新版本:
##代码##