J'avais un fichier de 18 Go que je devais télécharger sur une connexion Internet moins bonne. Le torrent n'était pas une option. J'ai donc éclaté le fichier en 100 segments, et finalement, tout a été téléchargé. Maintenant, je dois remonter les fichiers, en utilisant un programme qui ressemble à cat.
J'ai donc besoin de lister les fichiers, dans l'ordre de comptage, et de les concaténer. Les noms de fichiers vont quelque chose comme SomeFile1.dcd, SomeFile2.dcd, SomeFile3.dcd SomeFile10.dcd, ... SomeFile100.dcd
pour que la concaténation fonctionne correctement, je dois lister les fichiers dans l'ordre numérique normal, sinon les cadres seront tous vissés.
comment lister les fichiers dans l'ordre numérique type 1,2,3,4 ....?
Utilisation de bash
expansion d'accolade:
cat SomeFile{1..100}.dcd >final_file
Vous pouvez d'abord vérifier pour voir dans quels fichiers il est développé:
echo SomeFile{1..100}.dcd
Ici {1..100}
sera étendu à 1,2,3....100
.
Exemple:
$ echo SomeFile{1..5}.dcd
SomeFile1.dcd SomeFile2.dcd SomeFile3.dcd SomeFile4.dcd SomeFile5.dcd
Perl
peut également utiliser la syntaxe d'expansion dans les boucles:
Perl -e 'print "SomeFile$_.dcd " for 1..100' > foo.txt
en utilisant find
et sort
find . -maxdepth 1 -type f -name "*.dcd" | sort -V
Les modèles globaux se développeront jusqu'à la liste ordonnée des fichiers (et répertoires) correspondant au modèle globbing;
Si vous n'avez que ces fichiers dans votre répertoire de travail actuel, simplement:
cat * > out
Ou s'il n'y a pas d'autres fichiers/répertoires commençant par "SomeFile":
cat SomeFile* > out
Ou s'il n'y a pas d'autres fichiers/répertoires se terminant par ".dcd":
cat *.dcd > out
De plus, dans zsh
, vous ne pouvez inclure que des fichiers normaux en utilisant le modèle de globalisation *(.)
:
cat *(.) > out
cat SomeFile*(.) > out
cat *(.).dcd > out