Fermer le menu
 

Terminal : comment copier tous les PDF des Documents dans un dossier ?

Nicolas Furno | | 13:38 |  33

Comment récupérer tous les fichiers d’un certain format dans un dossier pour les copier dans un autre dossier ? C’est la question posée par un utilisateur sur nos forums et plusieurs réponses ont été proposées. La meilleure sélectionnée par le créateur du sujet implique de passer par les dossiers intelligents du Finder.

Initiez une recherche dans le dossier où vous voulez chercher les documents, choisissez un paramètre de type (1) pour filtrer les documents, puis enregistrez la recherche (2). Par défaut, ce dossier intelligent sera ajouté à la barre latérale du Finder, sur la gauche. Il ne reste plus ensuite qu’à copier toute la liste de fichiers pour les coller dans le dossier cible. Voici ce que cela donnerait pour récupérer tous les PDF des Documents :

N’importe quelle recherche effectuée dans le Finder peut être mémorisée et devenir un dossier intelligent. Ici, on liste tous les fichiers PDF situés dans le dossier Documents de la session en cours. Cliquer pour agrandir

C’est une solution efficace si on ne veut mener l’opération qu’une seule fois. Si vous avez besoin régulièrement de copier tous les PDF situés dans vos documents pour les coller dans un autre dossier, vous allez vite trouver cette méthode manuelle très contraignante.

C’est là que le terminal prend l’avantage. Ce genre de tâches simples et répétitives peut facilement être automatisé à condition de connaître la bonne ligne de commande. Voici celle que vous devriez saisir dans le terminal si vous voulez lister tous les fichiers PDF de votre dossier Documents et les copier dans un dossier, placé ici sur le bureau.

mdfind -onlyin ~/Documents/ "type:PDF" | xargs -I{} cp {} ~/Desktop/PDF

Pour changer les paramètres, vous pouvez modifier le dossier de recherche (~/Documents/ dans mon exemple) et celui de sortie (~/Desktop/PDF dans ce cas). Rappelons que le symbole ~ sert de raccourci pour designer le dossier personnel de votre session, le dossier représenté par la maison dans le Finder.

La commande mdfind utilisée ici permet d’exploiter la base de données de Spotlight pour chercher les fichiers. Dans ce cas, deux paramètres ont été ajoutés : une restriction à un seul dossier (par défaut, la recherche se fera sur tout le volume de stockage) et une restriction de format de fichiers entre guillemets. La liste complète des types disponibles est proposée par Apple à cette adresse.

Vous pouvez utiliser tous les paramètres accessibles également dans l’interface de l’outil de recherche. Pour sélectionner les fichiers à copier/coller par leur nom plutôt que par leur type, vous pouvez utiliser le paramètre "nom:nom-du-fichier". D’autres paramètres sont aussi disponibles, comme la date et vous pouvez combiner plusieurs paramètres et utiliser les opérateurs booléens (AND, OR…) pour affiner encore une recherche.

La ligne de commande en action : tous les PDF stockés dans les documents ont été copiés dans ce dossier. Cliquer pour agrandir

La deuxième partie de la commande sert à transmettre les résultats de la recherche Spotlight et d’en faire quelque chose. | xargs fait le lien entre les deux parties, et on utilise ici la commande cp qui permet de copier/coller des fichiers. En fonction de vos besoins, vous pourriez modifier la commande, par exemple en utilisant mv ce qui aurait alors comme effet de les déplacer dans le dossier cible (équivalent d’un glisser/déposer, ou d’un couper/coller).

Dernière précision, la commande cp copie tous les documents et les colle même s’ils existent déjà. Ajoutez le paramètre -n pour ne copier/coller que les nouveaux fichiers :

mdfind -onlyin ~/Documents/ "type:PDF" | xargs -I{} cp -n {} ~/Desktop/PDF

Si vous avez besoin d’effectuer régulièrement cette commande, vous pouvez la mémoriser avec un gestionnaire d’abréviations, ou bien la stocker dans un workflow avec Alfred, ou encore la placer dans un AppleScript ou créer un service avec Automator. Pour rester dans le terminal, mémoriser la commande sous la forme d’un alias est une excellente solution.

Pour en savoir plus sur le terminal, notre livre Tout savoir sur : Le terminal est disponible pour 4,99 €. Il s’adresse aux utilisateurs de macOS de tous les niveaux, même les débutants qui n’ont jamais ouvert le terminal auparavant.

Catégories: 

Les derniers dossiers

Ailleurs sur le Web


33 Commentaires Signaler un abus dans les commentaires

avatar iPop 26/03/2017 - 14:15 via iGeneration pour iOS (edité)

Pour moi c'est recherche : ".PDF"
Glisser/déposer/ALT dans un autre dossier

Ouvrir une application et une ligne de code c'est quand même assez long.

avatar Nicolas Furno macG 26/03/2017 - 15:27 via iGeneration pour iOS

@iPop

Ça l'est si c'est un besoin unique. Tout l'intérêt du terminal, c'est dans la répétition des tâches.

Un alias et vous pouvez refaire la même manipulation plus rapidement que n'importe quelle autre méthode.

avatar BeePotato 27/03/2017 - 00:03

@ Nicolas Furno : « Tout l'intérêt du terminal, c'est dans la répétition des tâches. »

Non, pas vraiment. C’est plus dans la souplesse de construction de solutions complexes.

« Un alias et vous pouvez refaire la même manipulation plus rapidement que n'importe quelle autre méthode. »

Ben non, pas dans ce cas précis. On refera la manipulation encore plus vite en passant par Automator, par exemple.

L’exemple de commande présenté ici était sympa et c’est une bonne idée de montrer ce qui peut être fait via un terminal. Mais la tentative de justification de cette approche par un gain de temps ou une plus grande facilité de répétition est boiteuse.



avatar ovea 27/03/2017 - 07:52 via iGeneration pour iOS

@BeePotato

Ce qui serait boiteux serait de ne pas utiliser les outils de l'interface graphique, en l'occurrence les résultats de Spotlight, une fois dans le terminal …

Au contraire, c'est tout sauf boiteux puisque ça permet de commencer à s'affranchir du découpage entres deux langages graphique/terminal qui sont totalement équivalents …

Ça serait boiteux si il ne restait qu'à dire que c'est vrai de façon constructive sans le faire !

avatar BeePotato 27/03/2017 - 11:07

@ ovea : « Ce qui serait boiteux serait de ne pas utiliser les outils de l'interface graphique, en l'occurrence les résultats de Spotlight, une fois dans le terminal … »

En effet (et c’est un des points très positifs de cet article : utiliser mdfind et non un simple find). Et à ce sujet, je regrette qu’Apple ne facilite pas l’accès depuis le terminal aux résultat d’une recherche enregistrée (un « dossier intelligent »).

Mais ça n’a rien à voir avec ce que je reprochais à l’article et ça ne change rien à ce que je disais. :-)

« Au contraire, c'est tout sauf boiteux puisque ça permet de commencer à s'affranchir du découpage entres deux langages graphique/terminal qui sont totalement équivalents … »

Manifestement, tu n’as pas saisi ce dont je parlais.

avatar ovea 27/03/2017 - 12:34 via iGeneration pour iOS

@BeePotato

L'essentiel n'est pas dans l'automatisation abstraite pour un gain de temps lors de l'exécution puisque c'est un acquis, mais dans la possibilité unique d'enregistrer les interactions utilisateurs pour les rejouer tel un didacticiel avec en plus un script modifiable de façon interactive, comme on fait du montage sur la bande temporel … et que cela puisse être transposé en batch dans le terminal sans interactions avec l'interface de l'utilisateur.

Automator ne le permettra jamais en restant dans son coin, et le terminal aussi.
Le seul gain de temps oblige le mélange des genres en l'absence de solution d'intégration de la part d'Apple

avatar sinbad21 26/03/2017 - 16:17

Je trouve aussi que c'est plus vite fait en passant par le Finder.

avatar stefhan 26/03/2017 - 14:38 via iGeneration pour iOS

Très instructif !

avatar occam 26/03/2017 - 15:42 via iGeneration pour iOS

Nicolas : votre manuel est excellent, même pour un vieux briscard d'Unix comme moi.

Grâce à vous, j'ai été en mesure de reprendre une vieille coutume du temps des *nix "nus" : répondre aux demandes relatives au Terminal par la référence de votre iBook et un simple "RTFM !".

Plus clair et plus parlant qu'une manpage.

avatar Nicolas Furno macG 26/03/2017 - 16:20 via iGeneration pour iOS

@occam

Merci pour les compliments. Et les recommandations ! 👍

avatar Bernard07 26/03/2017 - 18:18

Je vois que dans ma collection j'aimerai avoir un iBook MacG sur Automator ...

avatar marenostrum 26/03/2017 - 19:05

il suffit de trier par Type

avatar matyo 26/03/2017 - 20:18

mv ~/Documents/*.pdf ~/Documents/PDF ?? Simple, efficace

avatar sebasto72 27/03/2017 - 00:14 via iGeneration pour iOS

@matyo

Ta commande n'est pas récursive, elle ne va pas aller rechercher les fichiers dans les sous-répertoires.

avatar Rictusi 26/03/2017 - 21:07

Quel est l'intérêt de passer par le finder dans ce cas ci ? Je me demande s'il y a un avantage, est-ce plus rapide ? Plus ouvert ? Plus simple selon vous ? Je suis curieux de savoir n'étant pas un bash warrior du tout.

J'aurai bêtement écris ça comme ça:
cp `find ~/Documents -maxdepth 1 -type f -name '*.pdf'` ~/Desktop/PDF

Edit: Je viens de lire le forum, et en fait il est dit que ce serait plus simple, ma question est donc en quoi est-ce plus simple ?Plus rapide peut-être pour un gros batch ? Plus transparent pour un non-habitué du terminal peut-être ? Merci :)

Edit 2: En fait ça à aussi le mérite de nous avoir fait découvrir cette commande, en plus traditionnel find auquel tous le monde a pensé. Donc :+1: à macG

avatar hirtrey 26/03/2017 - 21:50 via iGeneration pour iOS

@Rictusi
find .... -exec mv (ou cp) {} mon_rep \;

avatar C1rc3@0rc 27/03/2017 - 13:54

Ta commande plante lorsque t'as un nom de fichier (ou dossier) avec des espaces ou des caracteres non "unix" (accents, espace, caracteres de controle BASH,...)

De plus tu as interet a ajouter -p au cp sur Mac et avec un find il faut aussi rajouter un -n pour eviter que les multiple fichiers avec le meme noms s'écrasent.

avatar BeePotato 27/03/2017 - 14:20

@ Rictusi : « Quel est l'intérêt de passer par le finder dans ce cas ci ? Je me demande s'il y a un avantage, est-ce plus rapide ? Plus ouvert ? Plus simple selon vous ? Je suis curieux de savoir n'étant pas un bash warrior du tout. »

En plus du souci de mauvaise gestion des noms de fichiers qu’a déjà soulevé C1rc3@0rc, ta solution présente un autre problème : les fichiers PDF avec une extension en majuscules ne seront pas copiés. Et on peut généraliser ce problème au cas des formats de fichier pour lequels plusieurs extensions sont valides.

Le passage par Spotlight via mdfind permet d’éviter cet écueil, puisqu’on n’y spécifie que le type de fichier, laissant Spotlight se débrouiller avec les extensions (ou éventuels autres systèmes d’indication du type des fichiers).

De plus, l’utilisation de mdfind sera potentiellement plus rapide qu’un find, qui parcourt le contenu des dossiers et sous-dossiers pour faire sa recherche, alors que Spotlight se repose sur sa base de données.

avatar PiRMeZuR 26/03/2017 - 22:16 via iGeneration pour iOS

Une action de dossier serait même encore plus pratique pour déplacer automatiquement tous les PDF déposés dans un dossier dans un autre.

avatar C1rc3@0rc 27/03/2017 - 13:55

+1

Surtout qu'en Apple script il est facile d'excuter un commande Bash...

avatar stivjobs 27/03/2017 - 08:21 via iGeneration pour iOS

Sinon pour réellement automatiser on doit pouvoir faire une petite tache CRON !

crontab -e
0 12 * * 1 votre-commande

Et ce sera exécuté sans rien avoir à faire tous les lundis à midi !

avatar docmib 27/03/2017 - 08:44

Tout dépend des besoins et de l'utilisation de l'ordinateur. Un utilisateur va préférer la plateforme graphique du Finder, un admin va en général privilégier la ligne de commande, plus complexe au départ certes mais permettant des manipulation beaucoup plus précises.

Perso je créé des scripts régulièrement et en effet il me faut parfois plusieurs heures pour en développer un complet, tester dans différentes situations. Mais au final quand on voit le résultat et le temps de gagné pour des tâches récurrentes il n'y a pas photo !

Le dernier en date: récupération de données sur un disque dur qui peine à monter par example. Le script va copier tous les dossiers d'un utilisateurs donnée après donnée sur un disque fraichement installé. Ca m'a sauvé pas mal d'utilisateurs là ou certains logiciels plantaient me disant que le disque était trop lent et défectueux. Bon pour certains il aura fallu plusieurs jours et tout n'a pas été récupéré mais autrefois quand je faisait ca à la main et au début sans script ligne par ligne de terminal ca me mobilisait pas mal. A présent j'attend que le script me dise haut et fort qu'il a terminé, petit log de fichiers qu'il n'a pas pu récupérer, droits modifiés sur les fichiers qui ont tous été remis en place et tout ca en double-cliquand sur un fichier bash ".command"......

Alors oui un certains temps de "perdu" à développer mais à la longue il m'a fait gagner déjà plusieurs jours de taf que je peux mobiliser sur d'autres tâches.

Pour ceux et celles qui voudraient un exemple concret tout est dit ici: http://imgur.com/gallery/Q8kV8

avatar Ielvin 27/03/2017 - 09:46 via iGeneration pour iOS

@docmib

Bonjour :)

Je copie les données à la main , comme vous avant ^^.
Je serai intéressé par un partage du script à titre personnel.

Apres si vous l'avez fait dans un cadre professionnel je peux comprendre que vous ne vouliez pas .

avatar docmib 27/03/2017 - 10:06

@Ielvin

Bonjour,

En effet j'ai développé ca au sein de mon travail, mais si le coeur vous en dis je peux partager avec vous une partie du code si vous souhaitez le re-créer de votre côté.

Envoyez-moi un MP avec votre adresse email et on va voir ce qu'on peut faire ;)

avatar BeePotato 27/03/2017 - 11:17

@ docmib : « Tout dépend des besoins et de l'utilisation de l’ordinateur. »

Oui, mais pas seulement. Ça dépend aussi des tâches à accomplir. Il convient de choisir le bon outil pour la bonne tâche.

« Un utilisateur va préférer la plateforme graphique du Finder, un admin va en général privilégier la ligne de commande, plus complexe au départ certes mais permettant des manipulation beaucoup plus précises. »

Un bon administrateur, comme un bon utilisateur d’ailleurs, privilégiera surtout l’outil le plus adapté pour accomplir ce qu’il veut.
Pour la plupart des manips complexes, ça passera par un script. Mais pour une manipulation aussi simple que ce qui est présenté dans l’article, Automator sera tout aussi adapté — voire plus, si le but n’est pas de déclencher l’action via cron mais manuellement, auquel cas une icône d’application dans le Dock ou dans la barre d’outils du Finder sera plus rapidement accessible qu’une commande dans le terminal. Et la vitesse de développement de la solution équivalente dans Automator est tout à fait équivalente à celle de l’écriture de la commande, avec le bonus d’un risque d’erreur nettement plus faible.

« Mais au final quand on voit le résultat et le temps de gagné pour des tâches récurrentes il n'y a pas photo ! »

Cet argument est en faveur de l’automatisation des tâches — pas spécifiquement en faveur d’une méthode d’automatisation ou d’une autre.

Pages