Déplacer / Grouper des fichiers Unix

J’ai un dossier avec environ 1000 fichiers et je veux les regrouper en fonction de leurs dossiers parents actifs.

J’ai fait ls- R > updated.txt pour obtenir la configuration originale des dossiers et des fichiers.

La updated. txt updated. txt ressemble à ceci:

 ./Rhodococcus_RHA1: NC_008268.fna NC_008269.fna NC_008270.fna NC_008271.fna ./Rhodoferax_ferrireducens_T118: NC_007901.fna NC_007908.fna ./Rhodopseudomonas_palussortings_BisA53: NC_008435.fna ./Rhodopseudomonas_palussortings_BisB18: NC_007925.fna ./Rhodopseudomonas_palussortings_BisB5: NC_007958.fna ./Rhodopseudomonas_palussortings_CGA009: NC_005296.fna NC_005297.fna 

Donc, en regardant ce fichier, je sais quels fichiers vont dans quel dossier. Le dossier contenant tous les 1000 fichiers ressemble à ceci:

 results_NC_004193.fna.1.ebwt.map results_NC_004307.fna.1.ebwt.map results_NC_004310.fna.1.ebwt.map results_NC_004311.fna.1.ebwt.map results_NC_004337.fna.1.ebwt.map results_NC_004342.fna.1.ebwt.map results_NC_004343.fna.1.ebwt.map results_NC_004344.fna.1.ebwt.map 

etc…

Vous pouvez voir que les noms de fichiers de tous les 1000 fichiers dépendent de leurs noms d’origine dans la configuration du dossier (si c’est un bon moyen de l’expliquer).

Je veux déplacer ces fichiers results_XXXXXXXX vers des dossiers (créer de nouveaux dossiers) avec la configuration d’origine. Donc ça devrait être quelque chose comme ça:

 ./Rhodococcus_RHA1: (this is a folder) results_NC_008268.fna.1.ebwt.map results_NC_008269.fna.1.ebwt.map results_NC_008270.fna.1.ebwt.map results_NC_008271.fna.1.ebwt.map ./Rhodoferax_ferrireducens_T118: results_NC_007901.fna.1.ebwt.map results_NC_007908.fna.1.ebwt.map 

Je ne sais pas vraiment comment faire cela … peut-être une sorte de commande mov ? J’apprécierais l’aide avec ce problème.

Exécutez la commande suivante à partir du dossier où vous avez ces 1000 fichiers. Le chemin / vers / original / fichiers est le chemin vers les fichiers originaux (celui que vous avez fait ls -R). vous devriez avoir une liste de commandes mv. Vérifiez plusieurs d’entre eux pour confirmer qu’ils sont corrects. Si oui, ajoutez | Après la commande, réexécutez-la pour exécuter ces commandes. Si vous ne disposez pas de tous les fichiers correspondants dans le dossier 1000 fichiers, vous obtiendrez les commandes mv qui renverront “fichier introuvable”, qui peut être ignoré ou redirigé vers / dev / null. Cela suppose que vous avez toujours un fichier dans le dossier d’origine afin qu’il sache où déplacer le fichier. Sinon, certains de ces 1000 fichiers ne seront pas déplacés. Comme toujours, faites une bonne sauvegarde avant de le faire.

 find path/to/original/files -type f | awk -F"/" '{ path=$0; sub($NF, "", path); printf("mv results_%s.1.ebwt.map \"%s\"\n", $NF, path);}'