2011-05-17 12 views
1

別のdirsにない1つのディレクトリ内のファイルを検索しますuTorrent
スクリプトは、ファイル名に '[]'のような文字が含まれている場合を除いて動作します。私は問題が "-name"は "$nombre"と解釈すると思います。どうすればこの動作を無効にできますか? nombre=$(basename "$torrent" .torrent | sed 's/\[/\\[/g; s/\]/\\]/g')私はこのbashスクリプトを書いた

をしかし、今、私は別の問題を抱えている:


まあ、私はこれに解決策を見つけました。私はuTorrentのデータフォルダにデータが存在しないトレントファイルを削除します。
私は私の以前のスクリプト(私が最初をテストしていますので、このスクリプトは何も削除されません)に変更しました:

#!/bin/bash 

DIR_TORRENTS="/home/simon/.wine/drive_c/users/simon/Datos de programa/uTorrent" 
DIR_DESCARGA=/home/simon/torrent-descargas/ 
DIR_TEMPORAL=/home/simon/torrent-temporal/ 

cd "$DIR_TORRENTS" 
for torrent in *.torrent 
do 
    nombre=$(basename "$torrent" .torrent | sed 's/\[/\\[/g; s/\]/\\]/g') 
    if ! find "$DIR_TEMPORAL" "$DIR_DESCARGA" -maxdepth 2 -name "$nombre" &> /dev/null 
    then 
     echo "$torrent" 
    fi 
done 

をしかし、なぜそれが、何も印刷していませんか?


まあ、これはあまりにも解か:

#!/bin/bash 

DIR_TORRENTS="/home/simon/.wine/drive_c/users/simon/Datos de programa/uTorrent" 
DIR_DESCARGA=/home/simon/torrent-descargas/ 
DIR_TEMPORAL=/home/simon/torrent-temporal/ 

rm -f /tmp/torrent_existentes 
cd "$DIR_TORRENTS" 
for torrent in *.torrent 
do 
    nombre=$(basename "$torrent" .torrent | sed 's/\[/\\[/g; s/\]/\\]/g') 
    find "$DIR_TEMPORAL" "$DIR_DESCARGA" -maxdepth 2 -name "$nombre" -printf '%f.torrent\n' >> /tmp/torrent_existentes 
done 
for torrent in *.torrent 
do 
    if ! grep -Fq "$torrent" /tmp/torrent_existentes 
    then 
     rm "$torrent" 
    fi 
done 

しかし、もっと単純に、このスクリプトを書くためにどのような方法があるの?あなたはノンブルをエスケープする必要が

+0

try '... -name $(quote" $ nombre ")...' –

+0

ありがとう、しかしこれは動作しません。 –

答えて

0

nombre='abc[def]ghi' 
printf -v escaped_nombre "%q" "$nombre" 
echo $escaped_nombre 
+0

ありがとうございます、しかし、このコマンドはすべての文字をエスケープし、これはfindも失敗することを引き起こします。 –

+0

@Simón - あなたはエスケープする必要がある文字を知っていますか? – linuts

+0

はい、この問題は解決しました(_私の編集した質問をご覧ください_) –

0

は、あなたはそれをこの方法を試してみました:

comm -1 -2 <(cd $DIR_1; find . | sort) <(cd $DIR_2; find . | sort) 

この意志の出力は、両方のディレクトリに共通のファイルのリストを。各行に接頭辞として "./"を付ける必要があるかもしれませんが、一般的なファイルのリストがあるときは簡単に実行できます。

編集:あなただけいずれかディレクトリ内の既存のファイルが必要な場合は、と-1 -2を置き換える:

  • -1 -3 ==>
  • -2 -3 ==>見つける$ DIR_2内のファイルのみを検索します$ DIR_1内のファイルのみ
+0

スクリプトをご覧ください。検索は同時に複数のフォルダにあります。 3つのフォルダがあり、フォルダの1つに複数のサブフォルダがあります。 –

+0

@Simónahhh ...スクリプトを何度か読み直した後、ついにわかりました。あなたが望むことをするために*スマートな方法がありますが、あなたのやり方は理解しやすいです。今から数週間以内に、よりスマートな方法はもはやあなたに意味をなさないかもしれません。だから、私はあなたの解決策に固執することをお勧めします。 – pepoluan

関連する問題