-1
votes

Comment trier des fichiers à l'aide de la commande de fichier en fonction des codages

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


1 commentaires

Vous devriez montrer au moins la quantité de recherches que vous avez mises en résolution de cette question vous-même.


3 Réponses :


0
votes

à partir du fichier man documentation, vous devez modifier la commande de fichier pour utiliser l'option - no-pad pour cette solution pour formater l'espace blanc de sortie correctement. .

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

fichier --NO-pad * | Awk -f ':' '{Impression de 2 $ ":" 1 $}' | Trier

Ceci utilise toutes les constructions et ne nécessite aucun programme externe.

Si vous préférez garder les codages dans la colonne de droite, l'option -k peut être utilisée dans l'autre solution fournie par @bayou.

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 UNIQ . .

fichier --NO-pad * | Awk -f ':' '{Impression de 2 $ 2 ":" 1 $ | "Trier"}'

comme, cela, mais encore une fois, vous pouvez tirer parti de la norme de manière plus robuste:

fichier --NO-pad * | Awk -f ':' '{Impression de 2 $ ":" 1 $}' | Trier | UNIQ


1 commentaires

Deux tuyaux seraient trop surchargés. Essayez de le faire dans awk seul (si possible).



0
votes

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


0 commentaires

0
votes

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


0 commentaires