recherche de fichier, voir mon article sur find

recherche de fichier contenant un texte :

grep -lR "pattern REGEX" /chemin/absolu ou * pour le répertoire courant. Le pattern REGEX est à remplacer par le texte à chercher ou le modèle suivant les règles REGEX (cf. mon article sur les REGEX pour plus de détail)

Pour exclure des répertoires, on peut ajouter l'option --exclude-dir :

grep -rn \ 
--exclude-dir={rep1, rep2, replist*} \
terme_recherché

lister que les fichiers et répertoires cachés :

ls -d .*

 

lister les répertoires cachés :

ls -d .*/

lister que les répertoires (non cachés) :

ls -d */

connaîre la taille d'un répertoire avec du (disk usage), si le chemin du répertoire est omis, c'est le répertoire courant qui est pris en compte :

du -hs repertoire

 lister les répertoires ou/et fichiers les plus gros :

du -hms * | sort -nr | head

disk usage liste les répertoire ou/et fichiers est exprime leurs tailles en Mo puis on trie (sort) et on ne conserve que les 10 premiers (head). Si on veut les 20 premiers, ajouter -n20 derrière head.

Pour lister respectivement, la taille totale et/ou la liste d'un type de fichier, bmp dans l'exemple ci-dessous (*):

find . -regex '.*\.bmp' -print0 | du --files0-from=- -ch | tail -1

find . -regex '.*\.bmp' -print0 | du --files0-from=- -ch | less

Pour compter le nombre de fichiers

find . -type f | wc -l

On peut aussi utiliser le programme tree, ci-dessous pour lister des fichiers sources:

tree -P '*.cpp|*.hpp|*.c|*.h'

Lister l'arborescence avec la taille cumulée du contenu des répertoires:

tree --du -h

et

tree -du -h -C -H . > tree.html

crée un fichier tree.html contenant l'arborescence et les tailles!

Trouver les fichiers (voir répertoires) récemment modifiés

Pour connaître les fichiers php modifiés dans les dernières 24 heures:

find *.php -mtime 0

Et versionner avec git ceux modifiés dans la dernière ½h qui ne sont pas (-not -path) dans le répertoire storage, qui ont pour extension .php

find . -type f -not -path '*/storage/*' -iname '*.php' -mmin -30 -exec git add {} \;

Lister-extraire l'arborescence (répertoires uniquement) d'un disque ou d'un répertoire :

sudo find ./ -type d > arborescence.txt

qui sauve dans le fichier arborescence.txt la liste des répertoires. Le problème est que sur un serveur de fichiers, ça peut faire beaucoup de lignes! Pour réduire le nombre de ligne, je supprime les lignes correspondant à des répertoires de niveau 4 et au delà (il suffit de l'adapter pour aller plus ou moins loin dans les niveaux) :

dans vim ou notepad++, recherche/remplacer

.*\/.*\/.*\/.*\/.*\n par rien

puis

\.\/ par rien pour supprimer le ./ en début de chaque ligne pour plus de lisibilité.

Enfin, on peut l'enregistrer en .csv puis finir la mise en forme dans Calc.

Lister les sessions ouvertes

sur une machine multi-utilisateurs pour par exemple redémarrer après une mise à jour :

who -u

Changer le nom du PC

sudo hostname nouveau_nom

qui ne suffit pas, si vous redémarrer, il récupère l'ancien

il faut aussi changer le nom dans le fichier /etc/hostname

echo nouveau_nom > /etc/hostname

enfin, si samba est installé (ce qui doit être le cas par défaut pour le partage avec des machines windows), il faut aussi modifier le fichier /etc/sambal/smb.conf pour définir le nom du partage

Créer un fichier texte et saisir rapidement des lignes dedans avec la commande cat

Il est parfois intéressant, par exemple pour un fichier de configuration ou simplement un fichier test, de créer un fichier et de saisir dedans quelques lignes sans lancer un éditeur :

cat > nouveau_fichier
ligne1 dans le fichier
ligne2 dans le fichier

après la dernière ligne saisie, revenir à la ligne et utiliser la combinaison de touche Ctrl-d pour terminer

Utiliser une commande en tant qu'argument d'une autre commande linux

Si vous utilisez ffmpeg pour réaliser un screencast (capture vidéo d'écran), il peut y avoir un problème pour définir le numéros de session s'il y a plusieurs sessions ouvertes. Voilà comment faire en passant en paramètre le numéro de session extrait avec les commandes who et un brin de script awk:

ffmpeg -f x11grab -s 1920x1080 -r 25 -i $(who | awk '{print substr($5,2,2)}').0 screencast.mp4

Autre exemple, compter les lignes de code source d'un programme:

wc -l $(ls *.cpp *.h)

Travailler sur plusieurs fichiers et/ou répertoires

Pour les supprimer :

rm -rf fichier1 repertoire1 fichier2 repertoire2

ou

rm -rf fichier{1,2} repertoire{1,2}

on peut recourir au expressions rationnelles:

rm -f $(ls | grep -i '^abc\.log\.')

similaire pour la copie:

cp -r src1 src2 dest/

on peut aussi faire, mais on ne copie alors que le contenu:

cp -r src1/ src2/ dest/

et pour les déplacer?

Pareil, avec l'option -r en moins !

scp chemin-src/{src1,src2} utilisateur@serveur:chemin-dest/dest/

NE PAS mettre d'espace dans l'accolade !