ubuntu linuxでファイルをコピーして追加

copy and append files in ubuntu linux


質問 written by asif @2019-01-16 11:37:00Z

: 0 : 1 : 43

それぞれ351個のテキストファイルを含む2つのフォルダーがあり、対応するテキストを1つのフォルダーから別のフォルダーの対応するファイルにコピーしたいですか? 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 written by Bodo @2019-01-16 13:54:53Z
2

DIR1およびDIR2は、それぞれディレクトリ2および3ファイル名が含まれています。 ファイル名に含まれるスペースまたは特殊文字に関する問題のほかに、 2/$iおよび3/$jを使用する必要があります。 $i$jだけでは、現在のディレクトリ( 23親)にある同じ名前のファイルを参照します。

lsの出力を解析しないことをお勧めします。 2つのネストされたループは必要ありません。

#!/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使用してスクリプト全体を実行することをおsudoします。 上記のバージョンでは、ルートとしてcat "$source"のみが実行されます。 スクリプト全体をルートとして実行する場合、これには>> "$dest"も含まれます。

コメント 1

上記の編集、2 / $ iおよび3 / $ jを実行すると、フォルダー3のファイルが次のように変更されます。......öööööööööööööööööööööööööööööööööööööööööö

written by @

コメント 2

@Xubair_Lone何を実行しましたか?「上記の編集を実行すると、2 / $ iおよび3 / $ j」がわかりません。

written by ボード @2019-01-16 13:15:24Z

コメント 3

スクリプトのbasenameコマンドのバグを修正しました。 $iではなく$source必要があります

written by Bodo @2019-01-16 13:17:24Z

コメント 4

はい、それをやった...ありがとう非常先生....また、それは...最初の行にこのööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööような何かを与える

written by アシフ @2019-01-16 13:20:47Z

コメント 5

それはすでに3フォルダファイルにあり、それに直接追加されました...助けてくれて...それは動作しています

written by ありがとう @2019-01-16 13:29:00Z