![如何在字符串路径中传递文件并将该文件复制到同一行的另一个路径?](https://linux22.com/image/127289/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%B7%AF%E5%BE%84%E4%B8%AD%E4%BC%A0%E9%80%92%E6%96%87%E4%BB%B6%E5%B9%B6%E5%B0%86%E8%AF%A5%E6%96%87%E4%BB%B6%E5%A4%8D%E5%88%B6%E5%88%B0%E5%90%8C%E4%B8%80%E8%A1%8C%E7%9A%84%E5%8F%A6%E4%B8%80%E4%B8%AA%E8%B7%AF%E5%BE%84%EF%BC%9F%20.png)
我是在 Linux 中编写脚本的新手。
我有输入文本文件,其中每一行包含两个由一个或多个空格分隔的字符串(文件路径)。
我正在编写一个自动脚本文件,该文件传递第一个字符串(路径)中列出的文件,将该文件复制到第二个字符串(路径),并对每个输入文件中的每一行重复。
我有 .zip 文件,其中包含输入文件中列出的所有文件。
它看起来像这样:
/path/to/file.x /different/path/to/file.x
/path/to/file2.x /different/path/to/file2.x
ETC。
其中 file.x 将被传递,然后从单独的 .zip 文件复制到不同的路径。
每个输入文件都有自己的 .zip,具有不同的行数和指示的不同路径。
我想我会尝试运行脚本:
~$ ./script.sh files.zip map.txt
然后编写脚本:
zipfile = "$1"
map = "$2"
externalprogram "$zipfile" "$map"
while IFS='' read -r line;
do
VAR_STR=$line
aLeng=${#VAR_STR[@]}
IFS=/ read -a arr <<< "$VAR_STR"
FILE="${arr[${aLeng}]-1}"
cp <path to zip file>/$FILE /different/path/
done < "$map"
显然,它相当复杂,我不知道如何在同一行中将第二条路径作为变量传递。
任何意见都会受到赞赏。谢谢。
编辑:我的意思是把map.txt放在我提到运行脚本的地方。另外,我应该说这对我来说相当复杂。 Linux 的学习还有很多我要做的^_^
答案1
由于您的问题是一个开放式的输入请求,而不是一个具体问题,因此这里有一些评论。
- 您似乎没有充分利用该
read
命令。查看手册页文档,了解如何轻松地使用它一次性读取多个字段到唯一变量,例如。read path1 path2
。 - 你为什么要分配
VAR_STR=$line
?在我看来,你可以直接操作$line
。 - 从第二个字段中修剪路径的方法很聪明,但是
bash
大多数其他 shell 都有一个直接、更简单且更有效的方法,使用#
习惯用法从变量中删除前缀模式,例如。FILE=${path2##*/}
。再次,请参阅手册页,了解 shell 可以非常高效地本地完成的其他很酷的事情的文档。 - 标准化 bash 变量的个人命名约定;要么全部小写,要么全部大写,但不要混合。
- 你以“显然......”开头的结论对我来说一点也不明显,因为我不知道你的意思。