GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo ordenar archivos en carpetas por tipo de archivo en bash (con el comando 'archivo')?

¿Qué tal algo como esto:


mkdir -p `file -b --mime-type *|uniq`
for x in `ls`
do
        cp $x `file -b --mime-type $x`
done

Yo uso cp, no puede funcionar con directorios.


Ajuste de respuesta de Dadam:

#!/bin/bash

file --mime-type -F"&" [YOUR PATH]/* > filetypes.txt
mkdir -p `cut -f2 -d"&" filetypes.txt | sed 's/[ ,:]//g' | sort -u`
IFS=$'\n'
for x in `cut -f1 -d"&" filetypes.txt`
do
  mv "$x" `file -b --mime-type "$x" | sed 's/[ ,:]//g'`
done 

Esta respuesta no ejecuta file comando varias veces para cada archivo, lo cual es innecesario

file  -N --mime-type -F"-&-" * | awk -F"-&-" 'BEGIN{q="\047"}
{
  o=$1
  gsub("/","_",$2);sub("^ +","",$2)
  if (!($2  in dir )) {
    dir[$2]
    cmd="mkdir -p "$2
    print cmd
    #system(cmd) #uncomment to use
  }
  files[o]=$2
}
END{
 for(f in files){
    cmd="cp "q f q"  "q files[f]"/"f".jpg" q
    print cmd
    #system(cmd) #uncomment to use
 }
}'

De manera similar, se puede hacer con el script bash4+ usando matrices asociativas.


Linux
  1. Ordenar comando en Linux con ejemplos

  2. ¿Cómo registrar cada comando escrito en Bash y cada operación de archivo?

  3. Bash Script para ordenar archivos en carpetas alfabéticas en Readynas Duo V1?

  4. Cómo encontrar archivos con el comando fd en Linux

  5. Cómo ordenar archivos en Linux usando el comando Ordenar

Cómo usar el comando rm de Linux con ejemplos

Cómo encontrar archivos con el comando fd en Linux

Cómo descargar archivos con el comando Curl en Linux

Cómo descargar archivos con el comando Wget en Linux

Cómo restaurar archivos y carpetas con JetBackup

Cómo encontrar archivos con docenas de criterios con el comando Bash Find