我有两个文件夹,每个文件夹包含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 /是包含数据的文件夹...
答案 0 :(得分:2)
DIR1
和DIR2
分别在目录2
和3
中包含文件名。
除了文件名中的空格或特殊字符可能引起的问题外,您还必须使用2/$i
和3/$j
。单独使用$i
和$j
会引用当前目录(2
和3
的父目录)中具有相同名称的文件。
最好不要解析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"
。