Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash脚本使用一个文件列表txt文件_Linux_Bash - Fatal编程技术网

Linux Bash脚本使用一个文件列表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

我有一个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 ..."
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。。。