# Traitement des fichiers

##### Faire un rechercher remplacer récursif :

Remplacer "texte1" par "texte2".

```
find . -name "*" -exec sed -i 's/texte1/texte2/g' {} \;
```

##### Rechercher une chaine présente dans des fichiers d'un dossier de manière récursive : 

```
grep -rnw /PATH/TO/THE/FOLDER -e 'MA-CHAÎNE'
```

##### Supprimer les dossiers datant de plus de quinze jours : 

```
DIR=/backup
find $DIR -type d -ctime +15 -exec rm -rf {};
```

**Grep toutes les IPS d'un fichier**

```
cat mon_super_fichier | grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
```

#### Taille dossier d'un niveau uniquement :

```bash
du --max-depth=1 -h
```

**Supprimer l'attribut d'immutabilité d'un fichier (en root on n'a pas la perm de le modifier !) :**

```
sudo chattr -i filetochange
```

<div class="d-flex fw-wrap ai-start jc-end gs8 gsy" id="bkmrk--14"></div><div class="d-flex fw-wrap ai-start jc-end gs8 gsy" id="bkmrk-ajouter%C2%A0-l%27attribut-"><span style="text-decoration: underline;">**Ajouter l'attribut d'immutabilité d'un fichier (en root on n'a pas la perm de le modifier !) :**</span></div>```bash
sudo chattr +i filetochange
```

### Récupérer un fichier perdu, supprimé :

Foremost permet de récupérer les fichiers supprimés. Cette récupération n'est pas parfaite car les données perdues peuvent être écrasés par une réécriture :

```bash
foremost -t all -i /dev/sda1
```

## Gérer les ACL

**<span style="text-decoration: underline;">Récupérer les informations d'un fichier :</span>**

```bash
stat launch_kee.sh
====================================================
  Fichier : launch_kee.sh
   Taille : 82        	Blocs : 8          Blocs d'E/S : 4096   fichier
Périphérique : 254/1	Inœud : 4718858     Liens : 1
Accès : (0755/-rwxr-xr-x)  UID : (    0/    root)   GID : (    0/    root)
 Accès : 2024-06-10 11:24:44.881570498 +0200
Modif. : 2024-06-10 11:24:33.865592246 +0200
Changt : 2024-06-10 11:24:41.201577761 +0200
  Créé : 2024-06-10 11:24:29.949599980 +0200

```

<span style="text-decoration: underline;">**Récupérer les ACL d'un fichier :**</span>

```bash
getfacl launch_kee.sh 
=========================
# file: launch_kee.sh
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

```

<span style="text-decoration: underline;">**Ajouter les perms à un utilisateur :** </span>

```
sudo setfacl -m user:nehemie:rw- launch_kee.sh 
```

<span style="text-decoration: underline;">**Constat :** </span>

```bash
getfacl launch_kee.sh 
==============================
# file: launch_kee.sh
# owner: root
# group: root
user::rwx
user:nehemie:rw-
group::r-x
mask::rwx
other::r-x

```

<span style="text-decoration: underline;">**Supprimer les perms à un utilisateur :** </span>

```bash
sudo setfacl -Rm user:nehemie:--- launch_kee.sh
```

- - R : ACL Récurcif

<span style="text-decoration: underline;">**Constat :** </span>

```bash
getfacl launch_kee.sh 
====================================
# file: launch_kee.sh
# owner: root
# group: root
user::rwx
user:nehemie:---
group::r-x
mask::r-x
other::r-x

```

#### <span style="text-decoration: underline;">**Cloner une carte SD:**</span>

**Créer l'ISO :**

```bash
umount /media/nehemie/boot 
umount /media/nehemie/rootfs 
sudo dd if=/dev/sdb of=/home/nehemie/backup/raspberry_16Go.iso
```

**Appliquer l'ISO (sur une autre carte SD) :**

<p class="callout info">**Débrancher la carte SD source puis, brancher la carte dest**</p>

```bash
umount /media/nehemie/boot 
umount /media/nehemie/rootfs 
sudo dd if=/home/nehemie/backup/raspberry_16Go.iso of=/dev/sdb
```

#### Trouver les fichiers les plus gros d'une partition

```bash
find / -xdev -type f -size +100M -exec du -h {} + 2>/dev/null | sort -hr | head -n 20
```

  
  
<span style="text-decoration: underline;">**Transformations via XARGS :** </span>

Quand on doit **exécuter une commande sur des centaines de fichiers** trouvés par `find`, traiter une liste depuis un fichier ou éviter l’erreur *“argument list too long”*, **`xargs`** est l’outil indispensable. Simple et puissant, `xargs` transforme l’entrée standard en **arguments** pour une autre commande, permettant de chaîner les commandes efficacement.

```bash
cat urls.txt | xargs -P 4 -I {} curl -O {}
```

P pour parallèles