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}"

也可以忽略以#开头的文件名

这是脚本的更新版本:

##代码##