J'ai 1000 fichiers csv dans un répertoire. Je voudrais les concaténer tous ensemble dans l'ordre. Ils sont nommés img_size_1.csv à environ img_size_1000.csv Cette réponse est proche mais suppose un fichier de liste. Est-ce que cela peut être fait dans une seule ligne?
Oui, avec la commande cat
sans nom:
$ cat *csv > all.csv
cat
fait ce qu'il dit sur la bouteille, il confirme son entrée et imprime sur la sortie standard. La commande ci-dessus donnera une erreur si un fichier appelé all.csv
existe déjà dans le répertoire cible:
$ cat *csv > all.csv
cat: all.csv: input file is output file
Vous pouvez ignorer cette erreur en toute sécurité, le contenu de Apparemment, sur certains systèmes (par exemple OSX selon les commentaires ci-dessous cette réponse), vous ne pouvez pas ignorer l'erreur et cela entrera dans une boucle, catting all.csv
sera écrasé.all.csv
en arrière jusqu'à ce que vous manquiez d'espace disque. Si oui, supprimez simplement all.csv
, s'il existe, avant d'exécuter la commande.
ls -1 *.csv | while read fn ; do cat "$fn" >> output.csv.file; done
Si vous souhaitez les concaténer par ordre alphabétique:
ls -1 *.csv | sort | while read fn ; do cat "$fn" >> output.csv.file; done
Si vous souhaitez les concaténer par ordre de création d'heure:
ls -1t *.csv | while read fn ; do cat "$fn" >> output.csv.file; done