linux:shell:gestion_des_fichiers_et_repertoires
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
linux/shell/gestion_des_fichiers_et_repertoires.txt · Dernière modification : 2022/06/13 10:45 de zandor