2016-07-07 11 views
0

* .txtの内容を別のディレクトリにある同じ名前の別のファイルにcatしようとしています。例えば。 ../../*.txt他のディレクトリの同じ名前のファイルに1つのファイルを置きます。

私が試してみました:

find . -type f -name "*.txt" -exec cat {} \; >> ../../*.txt 

、その上にいくつかのバリエーションがなく、あいまいなリダイレクトエラーまたはまったく何もないで終わります。

私はここで何が欠けていますか? 1つのファイルの場合

答えて

2

* 1対1マッピング。これは、../../ディレクトリのすべてのtxtファイルを表すためにbashによって拡張されます。これは、複数のファイルにリダイレクトしようとしているので、エラーが発生しています。

ファイル名を2回参照する必要があるため、forループを使用して検索するのではなく、検索する方が簡単かもしれません。

for file in *.txt 
do 
    if [ -f ./$file ] ; then 
     cat ./$file >> ../../$file 
    fi 
done 
0

あなたの質問は1つのファイルを示唆しているが、あなたの findコマンドは、タイプ *.txtの複数のファイルを行うにはタイプ *.txt

の多くのファイルを示唆し、あなたのfindコマンド試しに基づく

cat ./file1.txt >> ../../file1.txt 

find . -name "*.txt" -print0 | while read -d $'\0' filename 
do 
    cat ./$filename >> ../../$filename 
done 
+0

編集元の質問です。 –

0

猫と同じ名前を持つ別のファイルへの* .txtという内容

基本的に、あなたはここにファイルをコピーしています。あなたはいませんか?

あなたのために以下のものがうまくいくはずです。

find . -type f -iname "*.txt" -exec cp bash -c 'cp "$1" ../../"$1"' _ {} \; 
関連する問題