Strona 1 z 1

[bash] liczenie ilosci plikow w katalogu

: 10 lut 2008, 00:01
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>

Odp: [bash] liczenie ilosci plikow w katalogu

: 10 lut 2008, 02:17
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

Odp: [bash] liczenie ilosci plikow w katalogu

: 11 lut 2008, 15:42
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

Odp: [bash] liczenie ilosci plikow w katalogu

: 11 lut 2008, 16:08
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

Odp: [bash] liczenie ilosci plikow w katalogu

: 12 lut 2008, 00:07
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 :)

Odp: [bash] liczenie ilosci plikow w katalogu

: 24 lut 2010, 20:00
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.