Vraag Script om lege bestanden in de huidige map te vinden? [duplicaat]


Deze vraag heeft hier al een antwoord:

Ik probeer een script te schrijven dat in de huidige map naar lege bestanden kan zoeken, gevolgd door een telling van de lege bestanden. Ik zou ook willen dat de bestanden één per regel van de uitvoer zijn. De uitvoer van het programma ziet er bijvoorbeeld als volgt uit:

Lege bestanden zijn:
file1.pdf
file4.cpp
voorbeeld-file
Aantal lege bestanden: 3

0
2018-04-04 22:35


oorsprong




antwoorden:


Als u geen recurse nodig hebt (d.w.z. afdalen naar / tellen van lege bestanden in submappen), dan kunt u alleen standaard bestandstests gebruiken, bijvoorbeeld

n=0
for f in *; do 
  [[ -f "$f" ]] && [[ ! -s "$f" ]] && { echo "$f"; ((n++)); } 
done 
echo "Number of empty files: $n"

Van help test:

  -f FILE        True if file exists and is a regular file.
  -s FILE        True if file exists and is not empty.

1
2018-04-04 23:08



bedankt, nu als ik dit zelfde programma wilde maken maar het mogelijk zou maken om een ​​map als een argument te specificeren en als er geen argument wordt gegeven gebruik dan de huidige map? - Taylor Stevens
@TaylorStevens het is eigenlijk alleen een kwestie van het controleren van het aantal positionele parameters $# en dienovereenkomstig handelen. - steeldriver


De grootte van het lege bestand is meestal nul. Dus het uitvoeren van het volgende script zal helpen om de lege bestanden te vinden

find /home/ -type f -size oc -exec ls {} \;

Als eenheden kunt u gebruiken:

b – for 512-byte blocks (this is the default if no suffix is used)
c – for bytes
w – for two-byte words
k – for Kilobytes (units of 1024 bytes)
M – for Megabytes (units of 1048576 bytes)
G – for Gigabytes (units of 1073741824 bytes)

ik heb wat lege bestanden gemaakt en bewaard in de volgende map

/home/um/Documents/hello

Laten we nu alle lege bestanden zien die ik heb gemaakt

cd /home/um/Documents/hello Deze opdracht verandert de map in Hallo

ls -sh Het geeft een lijst van alle bestanden, inclusief de grootte in een voor mensen leesbaar formaat /home/um/Documents/hello

16K empty.odt 12K empty.pdf 8.0K empty.txt 16K excel.ods

De grootte van deze bestanden ligt echter in het bereik van 0 - 20 kb. Ik weet zeker dat dit bestand leeg is

Het is dus mogelijk om alle bestanden op grootte te sorteren.

find /home/um/Documents/hello -type pdf -size -20k -exec ls -lh {} \;

Het sorteert alle bestanden die kleiner zijn dan 20 kb


0
2018-04-04 23:58





U kunt de find commando om te zoeken naar lege bestanden

find . -maxdepth 1 -type f -empty | tee /dev/tty | wc -l

Waar

  • -maxdepth 1 kijk alleen in de huidige map en niet in submappen
  • -type f kijkt alleen naar bestanden, niet naar mappen
  • -empty controleert op lege bestanden
  • tee /dev/tty stuur bestandsnaam naar de terminal en naar wc
  • wc -l tel de bestanden

Zien man find voor meer informatie.


0
2018-04-04 22:49



/path/to/dest is lastig in een antwoord op een vraag over een script om lege bestanden in de huidige map te vinden. - karel