Dies ist für mich kein wichtiges Problem, aber ich fand rsync und find ziemlich robust. Ich war überrascht, als rsync an einer Datei erstickte und find es dann auch tat. ls -l
zeigt, dass die Datei 6093 Bytes hat (und dies ist die einzige Datei in diesem Verzeichnis, die dies tut, also habe ich dies getan, nachdem ich in dieses Verzeichnis geschrieben habe):
# 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
Irgendeine Idee was das bedeutet? Seltsamerweise
# find . -size 6093c | xargs less
funktioniert gut. Hier ist was ich sehe:
# 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 หมวà¸à¸«à¸¡à¸¹à¹:à¹à¸à¸¡à¹à¸à¸§à¹à¸à¹à¸¡à¸£à¸´à¸à¸²
Es wird nur geringfügig besser, wenn ich die Ergebnisse auf weniger pfeife:
# 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>
Das gleiche Verzeichnis hat eine Datei, mit der selbst ich nicht umgehen kann, aber ich kann sie auflisten, da sie sozusagen als ältester Eintrag angezeigt wird:
# 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>
Nicht besonders wichtig, aber neugierig.
EDIT: da diese frage sehr schnell auffallen muss, habe ich ein wenig "recherchiert" (was vielleicht ganz genau ist oder auch nicht). Ich konnte das Problem nicht ganz reproduzieren, aber:
Am oder um den 23. Oktober 2013 besuchte ich die wikidata.org-Seite zu American Game Shows. Zu dieser Zeit sah es so aus: https://www.wikidata.org/w/index.php?title=Q7213876&direction=prev&oldid=85645107
Ich bin dann einem oder mehreren der fremdsprachigen Links gefolgt.
Auf den fremden Links, denen ich folgte, verwendete ich https://en.wikipedia.org/wiki/DownThemAll ! um alle links herunterzuladen.
Dabei entstehen viele Dateinamen mit Sonderzeichen, und ich bin mir fast sicher, dass ich so an diese beiden seltsamen Dateien gekommen bin.
Wenn ich das heute mache, bekomme ich immer noch Dateinamen mit Sonderzeichen, aber nicht ganz die unten aufgeführten.
LC_ALL=C find . -size 6093c
und ähnliches?sort
und dies war der einfachste Weg, sie zu lösen).ls -lat | fgrep "6093 "
.Antworten:
Die seltsam benannte Datei könnte ein roter Hering sein. Ihre Werkzeuge führen mehrere Tricks aus, um Sie glauben zu lassen, etwas sei kaputt.
Der Dateiname ist in UTF-8 angegeben. Sie sollten also
export LANG=en_US.UTF-8
zulassen, dass Ihre Befehle den Dateinamen reibungslos verwenden. Führen Sie denlocale
Befehl ohne Argumente aus, um die aktuellen Umgebungsvariablen zu überprüfen.Oder, wenn Sie darauf bestehen, das Gebietsschema "C" zu verwenden, verwenden Sie
ls -b
ls, um Escape-Sequenzen anstelle von Fragezeichen zu drucken. Dann können Sie$'\353\266\204\…'
als Argument in Bash verwenden.Der
find
Befehl weigert sich feige, nicht-textuelle Zeichen in ein tty zu schreiben. Mit anderen Worten,find
undfind | cat
verhalten Sie sich anders, wenn letztere die Namen ohne Anführungszeichen schreiben. Deshalbfind | xargs
funktioniert das in der Tat. Eine robustere Art des Schreibens besteht darin,find -print0 | xargs -0
zu verhindern, dass mögliche Whitespace-Zeichen von xargs interpretiert werden.Dies erklärt nicht das "Keine solche Datei oder kein solches Verzeichnis" - auf jeden Fall kann Ihr Dateisystem tatsächlich einen Fehler enthalten - aber es sollte Ihnen ermöglichen, Ihre Absicht in der Befehlszeile genauer anzugeben.
Anfangs hielt ich es nicht für relevant, aber ich habe die Gewohnheit, seltsame Dateinamen mit einem Präfix
./
zu versehen, um zu verhindern, dass Befehle sie interpretieren. In der Seitenleiste wurde eine verwandte Frage "rsync: Doppelpunkt in Dateinamen" angezeigt, die möglicherweise die Ursache für Ihren rsync-Fehler ist.quelle