Linux Bash脚本使用一个文件列表txt文件
我有一个txt文件,其中包含一个大的文件列表。每个文件名在列表中有一行 我可以这样读:Linux Bash脚本使用一个文件列表txt文件,linux,bash,Linux,Bash,我有一个txt文件,其中包含一个大的文件列表。每个文件名在列表中有一行 我可以这样读: #!/bin/bash set -e in="${1:-file.txt}" [ ! -f "$in" ] && { echo "$0 - File $in not found."; exit 1; } while IFS= read -r file do echo "Copy $file ..." d
#!/bin/bash
set -e
in="${1:-file.txt}"
[ ! -f "$in" ] && { echo "$0 - File $in not found."; exit 1; }
while IFS= read -r file
do
echo "Copy $file ..."
done < "${in}"
#/bin/bash
set-e
in=“${1:-file.txt}”
[!-f“$in”]&&{echo“$0-找不到文件$in.。“退出1;}
而IFS=read-r文件
做
echo“复制$file…”
已完成<“${in}”
实际上,我最终想要实现的是读取这些行,然后对前20行或30行发出cp命令,然后从file.txt中删除它们,然后再次执行相同的操作。使用
readarray
可以轻松地一次读取输入行数:
while readrray -n 20 -t lines; do
for line in "${lines[@]}"; do
echo "Copy $file ..."
done
done < "${in}"
whilereadrray-n20-t行;做
对于“${lines[@]}”中的行;做
echo“复制$file…”
完成
已完成<“${in}”
您能更详细地解释一下您的主要问题是什么吗?它是如何读取一个20行乘20行的文件的吗?那么读取20行,然后复制文件,然后读取接下来的20行然后从文件中删除它们。txt
这很奇怪,为什么?一次只需阅读20行,无需从输入中删除。这是否回答了您的问题?(gniourf_gniourf使用mapfile
的答案应该是正确的)在我读了这行之后,我发出cp命令并复制该文件,然后想从列表中删除,因为我想知道哪些已经处理过,这就是原因。基本上,该文件包含50k行,所以我不会一次发布50k cp。。。