==== Trier des fichiers rapidement par extention ====
Déplace des fichiers en vrac dans un dossier en fonction de leur extension :
#!/bin/sh
cd ~/Downloads
pwd
## Image
echo "+ moving images"
find . -maxdepth 1 -type f \
-name "*jpg" -o -name "*JPG" \
-o -name "*jpeg" -o -name "*JPEG" \
-o -name "*png" -o -name "*PNG" \
| xargs -I '{}' mv {} images
## Document
echo "+ moving documents"
find . -maxdepth 1 -type f \
-name "*pdf" -o -name "*PDF" \
-o -name "*.doc" -o -name "*.DOC" \
-o -name "*.docx" -o -name "*.DOCX" \
-o -name "*.ppt" -o -name "*.PPT" \
-o -name "*.pptx" -o -name "*.PPTX" \
-o -name "*.xls" -o -name "*.XLS" \
-o -name "*.xlsx" -o -name "*.XLSX" \
-o -name "*odt" -o -name "*ODT" \
-o -name "*ods" -o -name "*ODS" \
-o -name "*odp" -o -name "*ODP" \
| xargs -I '{}' mv {} documents
## CAO
echo "+ moving CAO files"
find . -maxdepth 1 -type f \
-name "*stl" -o -name "*STL" \
-o -name "*dwg" -o -name "*DWG" \
-o -name "*dxf" -o -name "*DXF" \
| xargs -I '{}' mv {} CAO
## Vidéo
echo "+ moving videos"
find . -maxdepth 1 -type f \
-name "*mov" -o -name "*MOV" \
-o -name "*mp4" -o -name "*MP4" \
-o -name "*avi" -o -name "*AVI" \
-o -name "*mkv" -o -name "*MKV" \
| xargs -I '{}' mv {} videos
## Div execs / data / archives
echo "+ moving the rest"
find . -maxdepth 1 -type f \
-name "*txt" -o -name "*TXT" \
-o -name "*iso" -o -name "*ISO" \
-o -name "*csv" -o -name "*CSV" \
-o -name "*ics" -o -name "*ICS" \
-o -name "*sh" -o -name "*SH" \
-o -name "*py" -o -name "*PY" \
-o -name "*exe" -o -name "*EXE" \
-o -name "*AppImage" \
-o -name "*msi" -o -name "*MSI" \
-o -name "*deb" -o -name "*DEB" \
-o -name "*rpm" -o -name "*RPM" \
-o -name "*zip" -o -name "*ZIP" \
-o -name "*rar" -o -name "*RAR" \
-o -name "*.tar" -o -name "*.TAR" \
| xargs -I '{}' mv {} div-data-exe-archives
## remove ext
echo "- removing exts"
rm *.ext 2>/dev/null
## End information
echo ""
echo "unsorted files"
ls -al | grep '^-' | wc -l
echo ""
echo "Size on disk "
du -sh
echo ""
echo "done"
==== copier en conservant l'arborescence ====
[[https://ostechnix.com/copy-specific-file-types-while-keeping-directory-structure-in-linux/|source]]
find . -name '*.mp3' -exec cp --parents \{\} ~/target \;
* ''find'' – commande pour rechercher des fichiers et des dossiers dans les systèmes de type Unix.
* Le point (''.'') - signifie que nous avons copié le contenu du répertoire actuel.
* ''-name ‘*.mp3''' – recherche des fichiers avec l'extension .mp3
* ''-exec cp'' – exécutez la commande 'cp' pour copier les fichiers de la source vers le répertoire de destination.
* ''--parents'' - créez les répertoires parents intermédiaires si nécessaire pour préserver la structure des répertoires parents.
* ''\{\}'' – est automatiquement remplacé par le nom de fichier des fichiers trouvés par la commande « find ». Et les accolades sont échappées pour les protéger de l'expansion par le shell dans certaines versions de commande "find". Vous pouvez également utiliser ''{}'' sans caractères d'échappement.
* ''~/target'' – répertoire cible pour enregistrer les fichiers correspondants.
* ''\;'' – indique que les commandes à exécuter sont maintenant terminées et qu'il faut exécuter à nouveau la commande lors du prochain match.
==== copier récursivement tous les fichiers sans conserver l'arborescence ====
find . -name '*.PNG' -exec cp \{\} allpics/ \;
Ici nous sommes à la racine de l'arborescence à explorer et le dossier de destination est ''allpics''.
==== lister les différences entre deux répertoires ====
compter les différences
diff -y <(cd /chemin/du/dossier/1/ && ls -R) <(cd /chemin/du/dossier/2/ && ls -R) | wc -l
lister les différences dans diff.log
diff -y <(cd /chemin/du/dossier/1/ && ls -R) <(cd /chemin/du/dossier/2/ && ls -R) > diff.log
ajouter ''grep -E \/'' ou ''-d'' sur le ''ls'' permet de lister les répertoires
==== lister les duplicatas ====
[[https://buildvirtual.net/how-to-find-duplicate-files-on-linux/|source]]
**detect duplicates**
fdupes -Sr .
==== Utilisation du disque ====
quelques commandes pratiques :
#lister les 30 plus gros fichier d'une arborescence
du -Sh | sort -rh | head -30
#ncurse disk usage
ncdu
#sur system de fichier distant
ssh -C user@system ncdu -o- / | ./ncdu -f-