2013-04-10 141 views
0

我正在创建一个脚本,需要一个文件并将该文件复制到多个目录bash脚本将文件复制到多个指定的目录

例如, cp2dir filename dir1/ dir2/ dir3/

我已经找到了,看起来像我的路线是使用cat <inputfile> | tee <outputfile> <outputfile> <outputfile>但是,我发现以前的脚本似乎使用静态文件/目录。

我该如何处理用户输入?

我在想:

for i in $dir; do 
    cat $file | tee $i 

其中$目录和$文件是用户输入。我需要cut -d\ $ dir吗?

+0

'猫| tee'组合将无法正常工作。首先,你需要做'cat $ file | tee $ i/$(basename $ file)'(并且担心名字中的空格,但这是一个单独的练习)。然后,使用'cat | tee'表示文件的内容必须由两个进程处理,而不是只有一个,如果你按照答案中所示的方式使用'cp'。如果你想使用'tee',你可以证明'cat $ file | tee $(for $ in $ dir; do echo $ i/$(basename $ file); done)',但这是一种非正统的编写脚本的方式(但是为什么使用'$(...) )'而不是反引号)。 – 2013-04-10 20:10:13

回答

4
cp2dir() { 
    local file="$1" 
    shift 
    local -a dirs=("[email protected]") 

    for dir in "${dirs[@]}"; do 
     cp "$file" "$dir" 
    done 
} 

当然,这并不做任何安全检查,例如确定的目标实际上是目录。我把它留给你。

+0

本地数组dirs似乎对我来说过分杀伤。 – 2013-04-10 20:13:15

+0

@JonathanLeffler这不是必要的,但我觉得这比自己的文档更好,而不仅仅是循环pp。 – kojiro 2013-04-10 20:24:20

+0

只是想对这个@kojiro表示感谢。我不知道我为什么放屁,没有想到这一点,但你一直很有帮助。我已经添加了支票,但现在我无法弄清楚为什么这个东西甚至没有运行该功能。我还想弄清楚如何修复成功的copyall的输出并将其浓缩为一行。 [链接脚本](http://pastebin.com/iugBXndH) – hdub 2013-04-12 23:31:41

3
cp2dir() { 
    local file="$1" dir 
    shift 

    for dir in "[email protected]"; do 
     cp "$file" "$dir" 
    done 
} 
+0

感谢您的帮助! – hdub 2013-04-12 23:06:49

相关问题