web-dev-qa-db-fra.com

Comment puis-je concaténer tous les fichiers d'un répertoire ensemble en une seule opération en ligne de commande?

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?

21
codecowboy

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 all.csv sera écrasé. 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 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.

28
terdon
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
6
Slyx