Warum werden keine Ergebnisse für alle Dateien angezeigt?

457
Alexander Bird

I (für Neugier willen) leite du -ainnen /usr/lib/git-coreund es zeigt keine Ergebnisse für alle Dateien in diesem Verzeichnis. Warum lässt es eine beliebige Anzahl von Dateien aus?

Das ist, was cd /usr/lib/git-core; du -azurückkehrt:

4 ./git-merge-resolve 972 ./git-config 12 ./git-show-index 404 ./git-remote-ftp 4 ./git-difftool 16 ./git-rebase 20 ./git-submodule 40 ./git-issues 12 ./git-filter-branch 36 ./git-add--interactive 4 ./git-web--browse 12 ./git-bisect 8 ./git-relink 412 ./git-fast-import 4 ./git-merge-one-file 248 ./git-instaweb 20 ./git-am 4 ./git-lost-found 4 ./git-notes 384 ./git-daemon 8 ./t_gitshelve.py 376 ./git-http-backend 8 ./git-repack 20 ./gitshelve.py 4 ./git-parse-remote 24 ./git-rebase--interactive 4 ./git-quiltimport 380 ./git-imap-send 8 ./git-pull 4 ./git-sh-setup 4 ./git-difftool--helper 4 ./git-request-pull 372 ./git-shell 4 ./git-merge-octopus 392 ./git-http-fetch 8 ./git-mergetool 380 ./git-upload-pack 12 ./git-mergetool--lib 12 ./git-stash 404 ./git-http-push 5052 . 

Wenn ich jedoch laufe ls, werden viele weitere Dateien im aktuellen Verzeichnis als vorhanden angezeigt:

git git-add git-add--interactive git-am git-annotate git-apply git-archive git-bisect git-bisect--helper git-blame git-branch git-bundle git-cat-file git-check-attr git-check-ref-format git-checkout git-checkout-index git-cherry git-cherry-pick git-clean git-clone git-commit git-commit-tree git-config git-count-objects git-daemon git-describe git-diff git-diff-files git-diff-index git-diff-tree git-difftool git-difftool--helper git-fast-export git-fast-import git-fetch git-fetch-pack git-filter-branch git-fmt-merge-msg git-for-each-ref git-format-patch git-fsck git-fsck-objects git-gc git-get-tar-commit-id git-grep git-hash-object git-help git-http-backend git-http-fetch git-http-push git-imap-send git-index-pack git-init git-init-db git-instaweb git-issues git-log git-lost-found git-ls-files git-ls-remote git-ls-tree git-mailinfo git-mailsplit git-merge git-merge-base git-merge-file git-merge-index git-merge-octopus git-merge-one-file git-merge-ours git-merge-recursive git-merge-resolve git-merge-subtree git-merge-tree git-mergetool git-mergetool--lib git-mktag git-mktree git-mv git-name-rev git-notes git-pack-objects git-pack-redundant git-pack-refs git-parse-remote git-patch-id git-peek-remote git-prune git-prune-packed git-pull git-push git-quiltimport git-read-tree git-rebase git-rebase--interactive git-receive-pack git-reflog git-relink git-remote git-remote-ftp git-remote-ftps git-remote-http git-remote-https git-repack git-replace git-repo-config git-request-pull git-rerere git-reset git-rev-list git-rev-parse git-revert git-rm git-send-pack git-sh-setup git-shell git-shortlog git-show git-show-branch git-show-index git-show-ref git-stage git-stash git-status git-stripspace git-submodule git-symbolic-ref git-tag git-tar-tree git-unpack-file git-unpack-objects git-update-index git-update-ref git-update-server-info git-upload-archive git-upload-pack git-var git-verify-pack git-verify-tag git-web--browse git-whatchanged git-write-tree gitshelve.py t_gitshelve.py 

Kann jemand erklären, warum dunur für einige Dateien Informationen zurückgegeben werden? Ich sehe hier kein Muster.

Beim Laufen wird file $(du -a) | grep "^\."auch kein Muster angezeigt.

2
Kommt das auch für andere Verzeichnisse vor? Was ist mit der Ausgabe von 'ls -la'? Bandit vor 13 Jahren 0
In jedem anderen Ordner, den ich irgendwo in ~ versuche, finde ich, dass "du -a" Daten für jede Datei zurückgibt, die von "ls -aR" zurückgegeben wird. (Ich habe das getestet, indem ich den folgenden Befehl in ~ ausführte: `ls -aR1 | grep -E" ^ [^.] | ^ \. [^.]. * [^:] $ | ^ \.: $ "| Wc -l; du -a | wc -l` Ich weiß, das ist kompliziert, aber bitte vertraue mir, dass es ein guter Test ist, oder zeig mir, was daran falsch ist. Alexander Bird vor 13 Jahren 0
ich sehe dasselbe auch auf Ubuntu natty .. unter / usr / lib / git-core freethinker vor 13 Jahren 0
ls -aR1 | grep -E "^ [^.] | ^ \. [^.]. * [^:] $"> ../tmpls; du -a | gawk 'match ($ 2, /\.\/(.*)/, ary) '> ../tmpdu; sort ../tmpdu> ../tmpdus; sort ../tmpls> ../tmplss; diff ../tmplss ../tmpdus | grep '^ <' | gawk '' 'zeigt, welche Dateien _nicht_ von' du -a 'erfasst werden (für alle anderen, die besessen davon sind, eine Antwort zu finden, wie ich bin = D). Interessant zu beachten: Alle von du ausgelassenen Dateien sind ELF-Dateien. Es gibt auch viele, viele Dateien in `/ usr / lib`, die von 'du' weggelassen werden. Alexander Bird vor 13 Jahren 0

1 Antwort auf die Frage

2
freethinker

Wenn Sie ls -ilin das Verzeichnis ein.

Sie werden sehen, dass viele Dateien die gleichen Inodes haben. Und deshalb werden du -anur Informationen für die eindeutigen Inodes angezeigt

AHA!! Ich hatte eigentlich schon gedacht, dass harte Links das Problem sind, aber leider dachte ich, dass 'ls -l' eine Syntax aufweisen würde, die Softlinks für alle harten Links ähnelt. Deshalb habe ich vermisst, dass sie den gleichen Inode teilen. Du bist gerade mein Held :-) Alexander Bird vor 13 Jahren 0
Streng genommen wäre eine bessere Antwort `ls -AiR1`, (1) um` `.`'-Dateien einzuschließen, (2), weil Links in verschiedenen Verzeichnissen sein könnten, und (3), weil` -i` ohne `gut funktioniert -l`. Herzlichen Glückwunsch zum Finden des Grundproblems. Scott vor 10 Jahren 0