bash:将文件复制到多个位置

时间:2013-01-11 09:42:14

标签: linux scripting

#!/bin/bash
while read -r line; do
    mkdir "UNIX/$line"
done < usernames.lnk

MasterDir="/home/darkeve/Documents/OS/master/"         
USERHOME="/home/darkeve/Documents/OS/UNIX"            

for FILENAME in `cat $MasterFile`
do
    cp $MasterDir/$FILENAME $USERHOME/$USER
done

我的脚本完成第一个工作,它首先读取一个名为&#34; usernames&#34;并为UNIX文件夹中的每个用户创建单独的文件夹。但它应该从主文件夹中复制3个文件,名为&#34; file1,file2和file3&#34;并将它们复制到UNIX文件夹中的每个单独的用户文件夹中,但它根本不会这样做。任何帮助将不胜感激。

P.S。我对脚本非常陌生,所以请保持简单。

1 个答案:

答案 0 :(得分:1)

您当前的脚本在cp命令中使用$ USER,这是“用户运行脚本”而不是从 usernames.lnk 中读取。如果你想复制到每个单独的文件夹,你需要先将for循环放在第一个循环中,并使用$ line作为目标文件夹名称,如下所示:

#!/bin/bash
MasterDir="/home/darkeve/Documents/OS/master/"         
USERHOME="/home/darkeve/Documents/OS/UNIX"   
MasterFile="filenames.txt"

while read -r line; do
    mkdir "UNIX/$line"
    for FILENAME in `cat $MasterFile`
    do
        cp "$MasterDir/$FILENAME" $USERHOME/$line
    done
done < usernames.lnk

当你不确定出了什么问题时,简单回应一下通常是一个好主意,你可以尝试例如

echo "$line" 
echo "$USER"

等等,看看这些变量的区别。

此外,您的脚本中未定义 $ MasterFile 。它应该在开头时以与MasterDir和USERHOME相同的方式引入。

编辑:我在脚本示例中添加了它,请将其更改为与您的文件对应。