Comment puis-je trier ces fichiers dans différents fichiers en fonction des codages?
Quand je fais Fichier * code> i résultat de la suite de différents fichiers avec tant de codages différents. Comment trier chaque fichier dans un dossier dans différents dossiers en fonction des codages? P>
AmericanDreamsS01E17_en.srt: Little-endian UTF-16 Unicode text, with CRLF line terminators
The_Last_Mimzy_en.srt: Non-ISO extended-ASCII text, with CRLF line terminators
Everybody_Hates_Chris_S04_E06_en.srt: ISO-8859 text, with CRLF line terminators
Blackish_S01_E24_en.srt: OS/2 REXX batch file, UTF-8 Unicode (with BOM) text, with CRLF line terminators
Coyote_Ugly_en.srt: Non-ISO extended-ASCII text, with CRLF line terminators
Coyote_Ugly_en.txt: UTF-8 Unicode text, with very long lines, with no line terminators
Crash_en.srt: UTF-8 Unicode (with BOM) text, with CRLF line terminators.
Weeds_S02E12_en.srt: C++ source, UTF-8 Unicode (with BOM) text, with CRLF line terminators
Weeds_S02E12_en.txt: UTF-8 Unicode text, with very long lines
WeWereSoldiers_en.srt: ASCII text, with CRLF line terminators
WeWereSoldiers_en.txt: UTF-8 Unicode text, with very long lines, with no line terminators
Without_A_Paddle_en.srt: UTF-8 Unicode (with BOM) text, with CRLF line terminators
3 Réponses :
à partir du fichier La commande de fichier est canalisée à AWK afin que nous puissions spécifier le séparateur de champ, puis inverser les champs et simplement tuyer pour trier. Voir Schwartzian_transform P>
Ceci utilise toutes les constructions et ne nécessite aucun programme externe. P>
Si vous préférez garder les codages dans la colonne de droite, l'option Pour le commentaire En outre, by Bayou, vous pouvez trier cela à l'intérieur de l'AWK sans le tuyau supplémentaire, mais cela ne vous permet également pas d'utiliser des choses comme comme, cela, mais encore une fois, vous pouvez tirer parti de la norme de manière plus robuste: p>
man code> documentation, vous devez modifier la commande de fichier pour utiliser l'option
- no-pad code> pour cette solution pour formater l'espace blanc de sortie correctement. . p>
fichier --NO-pad * | Awk -f ':' '{Impression de 2 $ ":" 1 $}' | Trier code> p>
-k code> peut être utilisée dans l'autre solution fournie par @bayou. P>
UNIQ code>. p>.
fichier --NO-pad * | Awk -f ':' '{Impression de 2 $ 2 ":" 1 $ | "Trier"}' Code> P> P>
fichier --NO-pad * | Awk -f ':' '{Impression de 2 $ ":" 1 $}' | Trier | UNIQ code> p>
Deux tuyaux seraient trop surchargés. Essayez de le faire dans awk code> seul (si possible).
Vous pouvez utiliser la commande trier code> pour ceci:
$ find . | sort -k 2
WeWereSoldiers_en.srt: ASCII text, with CRLF line terminators
Weeds_S02E12_en.srt: C++ source, UTF-8 Unicode (with BOM) text, with CRLF line terminators
Everybody_Hates_Chris_S04_E06_en.srt: ISO-8859 text, with CRLF line terminators
AmericanDreamsS01E17_en.srt: Little-endian UTF-16 Unicode text, with CRLF line terminators
Coyote_Ugly_en.srt: Non-ISO extended-ASCII text, with CRLF line terminators
The_Last_Mimzy_en.srt: Non-ISO extended-ASCII text, with CRLF line terminators
Blackish_S01_E24_en.srt: OS/2 REXX batch file, UTF-8 Unicode (with BOM) text, with CRLF line terminators
Weeds_S02E12_en.txt: UTF-8 Unicode text, with very long lines
Coyote_Ugly_en.txt: UTF-8 Unicode text, with very long lines, with no line terminators
WeWereSoldiers_en.txt: UTF-8 Unicode text, with very long lines, with no line terminators
Crash_en.srt: UTF-8 Unicode (with BOM) text, with CRLF line terminators.
Without_A_Paddle_en.srt: UTF-8 Unicode (with BOM) text, with CRLF line terminators
Si votre intention est de déplacer les fichiers dans un nouveau répertoire en fonction du type de fichier, ce script vous aidera à:
#!/usr/bin/ruby require 'find' require 'fileutils' search_in='.' files = [] Dir.mkdir search_in + '/arranged' unless File.exists? search_in + '/arranged' arrange = { 'ASCII text, with CRLF line terminators' => 'ASCIIWITHCRLF', 'C++ source, UTF-8 Unicode (with BOM) text, with CRLF line terminators' => 'CPPUTF8', 'ISO-8859 text, with CRLF line terminators' => 'ISO8859CRLF', 'Little-endian UTF-16 Unicode text, with CRLF line terminators' => 'LEUTF16', 'Non-ISO extended-ASCII text, with CRLF line terminators' => 'NONISOEXASCIICRLF', 'OS/2 REXX batch file, UTF-8 Unicode (with BOM) text, with CRLF line terminators' => 'OS2REXXBATCHUTF8CRLF', 'UTF-8 Unicode (with BOM) text, with CRLF line terminators' => 'UNICODEBOMUTF8CRLF', 'UTF-8 Unicode text, with very long lines' => 'UNICODEUTF8LONGLINES', 'UTF-8 Unicode text, with very long lines, with no line terminators' => 'UNICODEUTF8LONGLINESNOLT', } arrange.each do |key,value| FileUtils.mkdir_p search_in + '/arranged/' + value unless File.exists? search_in + '/arranged/' + value end Find.find(search_in) do |path| file_type = system('file -b ' + path) FileUtils.cp(path, search_in + '/arranged/' + arrange[file_type]) if arrange.key?(file_type) end
Vous devriez montrer au moins la quantité de recherches que vous avez mises en résolution de cette question vous-même.