GNU/Linux >> Znalost Linux >  >> Linux

Jak třídit soubory do složek podle typu souboru na bash (pomocí příkazu 'file')?

Co třeba něco takového:


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

Používám cp, neumí pracovat s adresáři.


Dadamova úprava odpovědi:

#!/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 

Tato odpověď neprovede file příkaz několikrát pro každý soubor, což je zbytečné

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
 }
}'

podobně to lze provést pomocí skriptu bash4+ pomocí asociativních polí.


Linux
  1. Třídit příkaz v Linuxu s příklady

  2. Jak přihlásit každý příkaz zadaný do Bash a každou operaci se souborem?

  3. Bash Script k řazení souborů do abecedních složek na Readynas Duo V1?

  1. Jak najít soubory pomocí příkazu fd v Linuxu

  2. Jak třídit soubory v Linuxu pomocí příkazu Sort

  3. Jak gzipovat všechny soubory ve všech podadresářích do jednoho komprimovaného souboru v bash

  1. Jak číst soubory řádek po řádku v Bash

  2. Jak najít soubory v Linuxu pomocí příkazu Najít

  3. Jak používat příkaz SCP k bezpečnému přenosu souborů