在ubuntu Linux中复制和附加文件

时间:2019-01-16 11:37:00

标签: linux shell

我有两个文件夹,每个文件夹包含351个文本文件,我想将相应的文本从一个文件夹复制到另一个文件夹中的相应文件? 当我使用cat命令时,我得到一个空文件吗?可能是什么问题

我的代码是:

#!/bin/bash
DIR1=$(ls 2/)
DIR2=$(ls 3/)

for each $i in $DIR1; do
for each $j in $DIR2; do
if [[ $i == $j ]];then
sudo cat $i $j >> $j
fi
done
done

2 /和3 /是包含数据的文件夹...

1 个答案:

答案 0 :(得分:2)

DIR1DIR2分别在目录23中包含文件名。 除了文件名中的空格或特殊字符可能引起的问题外,您还必须使用2/$i3/$j。单独使用$i$j会引用当前目录(23的父目录)中具有相同名称的文件。

最好不要解析ls的输出。 您不需要两个嵌套循环。

#!/bin/bash

DIR1=2
DIR2=3

for source in $DIR1/*
do
    dest="$DIR2/$(basename $source)"

    if [ -f "$dest" ]
    then
        sudo cat "$source" >> "$dest"
    fi
done

另请参阅https://mywiki.wooledge.org/BashPitfalls#for_f_in_.24.28ls_.2A.mp3.29

根据您的需求,最好使用sudo运行整个脚本,而不是为每个文件运行sudo。上面的版本仅以root用户身份执行cat "$source"。当以根用户身份运行整个脚本时,它还包括>> "$dest"