[bash] liczenie ilosci plikow w katalogu

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Kuriozalny
Piegowaty Guziec
Piegowaty Guziec
Posty: 26
Rejestracja: 26 sty 2007, 18:03
Płeć: Mężczyzna
Wersja Ubuntu: 16.04
Środowisko graficzne: Unity
Architektura: x86_64

[bash] liczenie ilosci plikow w katalogu

Post autor: Kuriozalny »

1. "skopiuj wszystkie pliki, które nie zawierają literki U i policz ile ich jest."
2. "skopiuj wszystkie pliki, które zawierają literkę Z i policz ile ich jest"
3. "skopiuj tylko pliki, które zawierają literkę W i policz ile ich jest"
4. "skopiuj pliki, które nie zawierają literki I i policz ile ich jest"
Gdzies w internecie czlowiek szukal odpowiedzi na te pytania. W zasadzie to od kilku dni siedze i glowkuje (basha znam jedynie na tyle, zeby poprawie skonfigurowac i uzytkowac system).
Pierwsza czesc zadania 2 i 3 jest banalna:

Kod: Zaznacz cały

cp *Z*.* /folder
cp *W*.* /folder
Ale jak sprawdzic ile plikow sie skopiowalo, i jak wykluczyc pewne litery z nazw plikow?


przy okazji czy to jest poprawne?

Kod: Zaznacz cały

$folder = dir11
cp *Z*.* /$folder && cd $folder && <i tutaj cos co przeliczy pliki>
Awatar użytkownika
CyBEER
Piegowaty Guziec
Piegowaty Guziec
Posty: 15
Rejestracja: 13 wrz 2006, 19:18
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME
Kontakt:

Odp: [bash] liczenie ilosci plikow w katalogu

Post autor: CyBEER »

spróbuj tego

Kod: Zaznacz cały

cp *W* folder 
cd folder
ls *W* | wc -l
1. kopiowanie do katalogu folder wszystkich plików zawierających literkę W
2. zmiana katalogu
3. wylistowanie wszystkich plików w katalogu której zawierają literkę W i przekazanie wyjścia do funkcji wc, która z parametrem -l zlicza linie

co do pierwszego punktu spróbuj (ale nie jestem tego pewny, nie mam jak sprawdzić)

Kod: Zaznacz cały

cp *[^U]* folder
Registered Linux user #441023
Awatar użytkownika
vytah
Piegowaty Guziec
Piegowaty Guziec
Posty: 24
Rejestracja: 11 paź 2007, 17:44
Płeć: Mężczyzna
Wersja Ubuntu: 7.10
Środowisko graficzne: GNOME
Kontakt:

Odp: [bash] liczenie ilosci plikow w katalogu

Post autor: vytah »

ja bym jeszcze dodał jakiś przełącznik do ls, żeby wyświetlało też pliki ukryte, ale bez . i ..
Ale to chyba detal
bo ze mnie jest zimnokrVisty aktyVista co śVista na oczyVistą oczyVistość, która jest naroVista i zaVistna o moje śVistanie
trzeci-punkt.blog.onet.pl
ziemniak
Sędziwy Jeż
Sędziwy Jeż
Posty: 42
Rejestracja: 11 lut 2008, 13:31
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: KDE Plasma
Architektura: x86

Odp: [bash] liczenie ilosci plikow w katalogu

Post autor: ziemniak »

To powinno policzyć też pliki zaczynające się od . a nawet od ..
ls -al | grep W|wc -l

A to jest druga część pierwszego
ls -al|sed -e '/.U/d'|wc -l

w obu przypadkach jeszcze trzeba by albo prze formatować ls aby pokazywał tylko jedną kolumne i obcinał pierwsze 3 wiersze.

Polecam
http://www.gentoo.org/doc/pl/articles/l-sed1.xml
+coś o awk i grepie z tym wszystko zrobisz
Awatar użytkownika
noisy
Piegowaty Guziec
Piegowaty Guziec
Posty: 11
Rejestracja: 12 paź 2007, 01:32
Płeć: Mężczyzna
Wersja Ubuntu: 16.04
Środowisko graficzne: Unity
Architektura: x86_64

Odp: [bash] liczenie ilosci plikow w katalogu

Post autor: noisy »

kiedyś napisałem taki skrypcik na zajęcia z podstaw systemów operacyjnych...może się przyda ;)

Kod: Zaznacz cały

#!/bin/bash

################################################
# noisy
################################################


if [ $# = 0 ]  #jezeli nie podano parametrow
then

    echo -e "Spróbuj '\e[93m$0 --help\e[0m' dla uzyskania informacji." 

else

	while [ -n "$1" ] #dopuki mamy jakis parametr do obsluzenia
	do
	
		if [ $1 = "--help" ] #jezeli uzytkownik chce helpa
		then
		
			echo -e "\nSkładnia: $0 [KATALOG] [KATALOG] ...\n"
			echo -e "\tSkrypt, generuje statystykę uprawnień zwykłych plików w katalogu podanym w parametrze. "
			echo -e "\tTzn. jako wyniki wypisuje ile było plików ktore mialy uprawnienie 'r' w grupie user 'w'"
			echo -e "\tw grupie user 'x' w grupie user 'r' w grupie group itd.\n"
			
		else
	
			if [ -d $1 ]  # jezeli istnieje katalog podany w parametrze
			then
				tab=(0 0 0 0 0 0 0 0 0) #zerowanie przydatne, przy kolejnych obiegach petli

				for x in $1/* 		#dla wszystkiego znajdujacego sie w katalogu z parametru
				do
					if [ -f $x ]   #dla wszystkie co jest plikiem
					then
						attrib=`ls -l $x | cut -c 2-10`	#wytnij sobie atrybuty
						i=0		
						while [ $i -le 8 ]
						do
				
							tmp=`echo $attrib | cut -c $[i+1]`  #wyciaga konkretny znak

							if [ $tmp != "-" ]		#porownoje go
							then
								tab[$i]=$[tab[$i]+1]
							fi
	     
							i=$[i+1]
	     
						done

					fi

				done

			
								
				echo -e "W katalogu\e[93m $1 \e[0mz danymi atrybutami pliki wystepuja w nastepujacych ilosciach"
				echo -e "\e[31mW user \e[0m"
				echo "r - ${tab[0]}"
				echo "w - ${tab[1]}"
				echo "x - ${tab[2]}"

				echo -e "\e[32mW group \e[0m"
				echo "r - ${tab[3]}"
				echo "w - ${tab[4]}"
				echo "x - ${tab[5]}"

				echo -e "\e[35mW others \e[0m"
				echo "r - ${tab[6]}"
				echo "w - ${tab[7]}"
				echo "x - ${tab[8]}"
	
			else
				echo -e "\e[31m$1 nie jest katalogiem\e[0m"
			fi #end of if [ -d $1 ] 
		fi #end of if [ $1 = "--help" ]
		

	shift

	
	done #end of while [ -n "$1" ]
fi #end of if [ $# = 0 ]



powinno być nawet z kolorem, dzięki tym krzaczkom w tekście :)
http://eKundelek.pl - najsympatyczniejszy blog o e-czytnikach Kindle
barthoosh
Piegowaty Guziec
Piegowaty Guziec
Posty: 1
Rejestracja: 24 lut 2010, 19:28
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: KDE Plasma
Architektura: x86_64

Odp: [bash] liczenie ilosci plikow w katalogu

Post autor: barthoosh »

Wiem, że temat stareeńki, ale może komuś się przyda:
Kuriozalny pisze: 1. "skopiuj wszystkie pliki, które nie zawierają literki U i policz ile ich jest."
2. "skopiuj wszystkie pliki, które zawierają literkę Z i policz ile ich jest"
3. "skopiuj tylko pliki, które zawierają literkę W i policz ile ich jest"
4. "skopiuj pliki, które nie zawierają literki I i policz ile ich jest"
Ad1
folder=jakiś mój katalog
cp `ls --ignore=*U*` $folder; ls -l | grep -c U

Ad2

Kod: Zaznacz cały

cp *Z* $folder ; cp .*Z* $folder ; ls -al $folder | grep -c Z
Ad3 - podobnie

Ad4
[/code]
ls | grep -c I; cp `ls --ignore=*I*` $folder
[/code]

grep -c zlicza pasujące linie. Reszta jest chyba jasna.
W rozwiązaniu 1 i 4 może być kwas z plikami ukrytymi.
Dodanie opcji -a do ls: ls -a powinno sprawę załatwić,
jeżeli problem wystąpił.
To tyle.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość