Jeg lager en liste over alle filene på PC-en.
FILES=$(find . -type f -name "*" -printf "%s/%f\n" | sort -n)
Utgangen skal være:
"size/file_name" 56872/file.txt 98566/test 1000254/foo
Min PC gir meg feil
find: -printf: unknown primary or operator
Noen løsninger?
Kommentarer
Svar
-printf
alternativet er ikke i POSIX
find
. Det er en funksjon av GNU find
, f.eks. På Linux.
Den spesielle implementeringen du bruker vises ikke; det kan være POSIX uten utvidelser. Det er for eksempel ikke i FreeBSD , eller OSX .
Uten det kan du bruke et alternativ, for eksempel dette (som ikke vil håndtere innebygde emner osv., Men gir få forutsetninger om verktøyene dine):
find . -type f -exec ls -ld {} \; | awk "{ gsub("^.*/","",$9); printf "%s/%s\n", $5, $9; }"
Med mer informasjon om tilgjengelige verktøy er det (vanligvis) mulig å forbedre løsningen.
Kommentarer
- Vær så snill og hvordan kan jeg lage liste med utgang " file_size / file_name " som ovenfor?
- hvorfor analysere
ls
når det ville være mye bedre å brukefind ... -print0
og pipe tilxargs -0r stat ...
? Både GNU- og FreeBSD-versjoner avstat
har (dessverre forskjellige / inkompatible) alternativer for å formatere utdataene, og kan visesize/filename
som OP krever . - OP ga ingen informasjon som tillot en å anta en bestemt plattformspesifikk løsning.
Svar
find
og xargs
med GNU stat
:
find . -type f -print0 | xargs -0r stat -c "%s/%n"
Denne GNU-versjonen er ikke virkelig nødvendig for dette spesielle spørsmålet fordi GNU find
støtter printf
uansett (men det kan være nyttig i andre sammenhenger fordi det er ting som stat
kan finne ut om en fil som find ... -printf
kan ikke vise.
FreeBSD & Mac OS X er imidlertid en annen historie.
find
og xargs
med FreeBSD ( Mac OS X) stat
:
find . -type f -print0 | xargs -0r stat -f "%z/%N"
Eventuelt rør utgangen gjennom sed -e "s:/./:/:"
for å fjerne ./
i begynnelsen av hvert filnavn.
Eksempelutgang fra min FreeBSD-test-VM:
# find . -type f -print0 | xargs -0r stat -f "%z/%N" | sed -e "s:/./:/:" | head 149/.k5login 254/.profile 1169/.cshrc 297/.login 5589/.history 171/.ssh/known_hosts 1803/.ssh/authorized_keys 6699/.bash_history 368/.bashrc 4065/.viminfo
find
brukes?