GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie sortiere ich Dateien in Ordnern nach Dateityp auf Bash (mit dem Befehl ‚file‘)?

Wie wäre es mit so etwas:


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

Ich benutze cp, es kann nicht mit Verzeichnissen arbeiten.


Dadams Antwortanpassung:

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

Diese Antwort führt file nicht aus Befehl mehrmals für jede Datei, was unnötig ist

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

ähnlich kann dies mit bash4+-Skripten unter Verwendung assoziativer Arrays erfolgen.


Linux
  1. Wie protokolliere ich jeden in Bash eingegebenen Befehl und jede Dateioperation?

  2. Bash-Skript zum Sortieren von Dateien in alphabetische Ordner auf Readynas Duo V1?

  3. So finden Sie Dateien mit dem fd-Befehl in Linux

  4. So sortieren Sie Dateien in Linux mit dem Sortierbefehl

  5. So komprimieren Sie alle Dateien in allen Unterverzeichnissen in eine komprimierte Datei in Bash

So verwenden Sie den Linux-rm-Befehl mit Beispielen

So finden Sie Dateien mit dem fd-Befehl in Linux

So laden Sie Dateien mit dem Curl-Befehl unter Linux herunter

So laden Sie Dateien mit dem Wget-Befehl unter Linux herunter

So stellen Sie Dateien und Ordner mit JetBackup wieder her

So finden Sie Dateien mit Dutzenden von Kriterien mit dem Bash-Suchbefehl