Table des matières

Linux

Gestion des fichiers et répertoires


Trouver les répertoires les plus remplis

find ./* -prune -type d -exec du -sk {} \;

récupérer le dernier fichier d'une liste

ls -l | tail -1

Se positionner dans le répertoire du script courant lors de son exécution

positionner les 2 lignes suivantes en début de script

SCRIPT_DIR=`echo $0 | awk -F "/" '{if($NF!=$0){print substr($0,0,length($0)-length($NF)-1)}else{print "."}}'`
cd $SCRIPT_DIR

Trier les repertoires par taille

du . | sort -n -r | head -n 50

Trier les fichiers par taille

du -a . | sort -n -r | head -n 50

Appliquer des droits aux dossiers seulement

find . -type d -exec chmod 755 {} \;

Changer le propriétaire de plusieurs fichiers d'un coup

find <repertoire> -uid <UID> -exec chown wwwrun:www {} +

Taille en ko d'un répertoire

du -sk $REP | awk '{print $2,": ",$1, "ko"}'

Taille en ko des sous-répertoires du répertoire courant

for REP in `ls -l | grep '^d'`
do
     du -sk $REP | awk '{print $2,": ",$1, "ko"}'
done

Découpage d'un fichier avec chemin relatif ou absolu

Nom de fichier basename
Chemin d'acces au fichier dirname


Effacer tous les fichiers d'une certaine date

for FIC in `ls -lrt | grep "^-" | grep " ao.t 24 " |  awk '{print $9}'`
do
	rm -rf ${FIC}
done
– OU –
ls -lrt | grep "f.vr  4" | sed -e 's/.* //' | xargs rm 

Effacer tous les fichiers de plus de XX jours

find ${REP}/ -name "*.gz" -mtime +7 -exec rm {} \;

Renommer une série de fichiers

exemple : renommer IMG_xxxx.jpg en YYYYMMJJ_photo_xxxx.jpg

ls IMG_*.jpg | sed 's:IMG_\(.*\).jpg:mv "&" "`date +Ymd`_photo_\1":g' | ksh

exemple : déplacer et renommer tous les fichiers contenant TEST en PREFIXE_*test* + utilisation de variables pour les répertoires

export REPSRC=/tmp/SOURCE
export REPDST=/tmd/DESTINATION
find ${REPSRC} -name *TEST* | sed "s:${REPSRC}/\(.*\):mv & ${REPDST}/PREFIXE_\1:g" | ksh

Mettre les extensions de fichiers en minuscules

ls *.CBL | sed 's/\(.*\)\.CBL/mv \1\.CBL \1\.cbl/g' | ksh

Effectuer des remplacements dans un fichier

sed 's/<FROM>/<TO>/g' -i <FICHIER>

Remplacement global dans plusieurs fichiers d'une même date

Avec recuperation du fichier d'origine si plantage :

for FIC in `ls -lrt | grep " Dec 14 " |  grep "<chaine>" | awk '{print $9}'`
do
    mv $FIC $FIC.old
	print -n Remplacement dans $FIC...
	sed 's/<FROM>/<TO>/g' < $FIC.old > $FIC
	if (( $? == 0 ))
	then
	     print OK
	     rm -f $FIC.old
	else
	     print KO
	     mv $FIC.old $FIC
	fi
done

Remplacement global dans plusieurs fichiers avec find

for FIC in `find . -type f`
do
        echo -e -n "Remplacement dans $FIC... "
        sed 's/function blabla/function blabla/g' -i $FIC
        if (( $? == 0 ))
        then
             echo OK
        else
             echo KO
        fi
done