奇妙な名前のファイルから2つのブロックを見つけてrsync

奇妙な名前のファイルから2つのブロックを見つけてrsync

これは私にとって大きな問題ではありませんが、rsyncとfindが非常に強力であると思ったので、rsyncがファイルからブロックされたときに驚いて、findは同じことをしました。ls -lファイルが6093バイトであることを示しています(ディレクトリ内の唯一のファイルなので、ディレクトリにCDを挿入した後にこれを行います)。

# find . -size 6093c
./????????????????????????:??????????????????????????????????????????
find: './\353\266\204\353\245\230:\353\257\270\352\265\255\354\235\230_\355\205\224\353\240\210\353\271\204\354\240\204_\352\262\214\354\236\204_\354\207\274': No such file or directory

これはどういう意味なのかご存知ですか?奇妙なことは、

# find . -size 6093c | xargs less

うまくいきます。これがlsが見るものです:

# ls -lat | fgrep "6093 "
ls: cannot access ''$'\353\266\204\353\245\230'':'$'\353\257\270\352\265\255\354\235\230''_'$'\355\205\224\353\240\210\353\271\204\354\240\204''_'$'\352\262\214\354\236\204''_'$'\354\207\274': No such file or directory
-rw-rw-r--. 1 nobody nobody   6093 Oct 23  2013 หมวà¸à¸«à¸¡à¸¹à¹:à¹à¸à¸¡à¹à¸à¸§à¹à¸­à¹à¸¡à¸£à¸´à¸à¸²

結果をより少なくパイプすると少し良いです。

# ls -lat | fgrep "6093 " | less

ls: cannot access ''$'\353\266\204\353\245\230'':'$'\353\257\270\352\265\255\354\235\230''_'$'\355\205\224\353\240\210\353\271\204\354\240\204''_'$'\352\262\214\354\236\204''_'$'\354\207\274': No such file or directory
-rw-rw-r--. 1 nobody nobody   6093 Oct 23  2013 <E0><B8><AB><E0><B8><A1><E0><B8><A7><E0><B8><94><E0><B8><AB><E0><B8><A1><E0><B8><B9><E0><B9><88>:<E0><B9><80>
<E0><B8><81><E0><B8><A1><E0><B9><82><E0><B8><8A><E0><B8><A7><E0><B9><8C><E0><B8><AD><E0><B9><80><E0><B8><A1><E0><B8><A3><E0><B8><B4><E0><B8><81><E0><B8><B2>

同じディレクトリにlsでも処理できないファイルがありますが、最も古いエントリとして表示されるため、一覧表示できます。

# ls -lat | tail -1 | less
ls: cannot access ''$'\353\266\204\353\245\230'':'$'\353\257\270\352\265\255\354\235\230''_'$'\355\205\224\353\240\210\353\271\204\354\240\204''_'$'\352\262\214\354\236\204''_'$'\354\207\274': No such file or directory
-?????????? ? ?      ?           ?            ? <EB><B6><84><EB><A5><98>:<EB>
<AF><B8><EA><B5><AD><EC><9D><98>_<ED><85><94><EB><A0><88><EB><B9><84><EC><A0>
<84>_<EA><B2><8C><EC><9E><84>_<EC><87><BC>

特に重要ではありませんが、少し気になります。

編集:この質問はすぐに多くの興味を持っているようで、いくつかの「調査」を行いました(完全に正確でも正確でもないかもしれません)。問題を再現することはできませんが、次のようになります。

  • 2013年10月23日以降、私はアメリカのゲームショーのwikidata.orgページを訪問しました。当時の状況は次の通りであった。https://www.wikidata.org/w/index.php?title=Q7213876&direction=prev&oldid=85645107

  • その後、1つ以上の外国語リンクをクリックしました。

  • 私がフォローしている外国のリンクから、https://en.wikipedia.org/wiki/DownThemAll!すべてのリンクをダウンロードしてください。

  • これにより、特殊文字を含む多くのファイル名が生成されます。

  • ただし、今日この操作を実行すると、まだ特殊文字を含むファイル名が表示されますが、まさに以下の名前は表示されません。

答え1

この奇妙な名前のファイルは赤いニシンである可能性があります。あなたのツールは、何かが壊れていると思わせるトリックを実行しています。

ファイル名はUTF-8形式であるため、export LANG=en_US.UTF-8コマンドが摩擦なしでファイル名を使用できるようにする必要があります。引数なしでコマンドを実行して、locale現在の環境変数を確認します。

または、「C」ロケールの使用に固執する場合は、ls -blsを使用して疑問符の代わりにエスケープシーケンスを印刷します。その後、$'\353\266\204\…'Bashのパラメータとして使用できます。

このfindコマンドは、ttyにテキストではなく文字を書き込むことを慎重に拒否します。つまり、find動作がfind | cat異なり、後者は引用符なしで名前を書くためにfind | xargs動作します。より安定した書き方は、find -print0 | xargs -0xargsが可能な空白文字を解釈するのを防ぐことです。

これは、「該当するファイルやディレクトリはありません」を説明しません。とにかく、あなたのファイルシステムにエラーが含まれています。ただし、これにより、コマンドラインにあなたの意図をより正確に記述することができます。

最初はこれは関係がないと思いましたが、./コマンドがファイル名を解釈するのを防ぐために、奇妙なファイル名の前にプレフィックスを付ける習慣があります。サイドバーには関連する質問が表示されます。"rsync: ファイル名のコロン"これがrsyncエラーの根本原因である可能性があります。

関連情報