Quelque chose comme
shotwell *.cr2 ./
Cela ne fonctionne pas, mais je souhaite utiliser Shotwell pour ouvrir tous les fichiers se terminant par .cr2
et dans le répertoire en cours (y compris les sous-dossiers).
Le contexte est qu'il me manque des photos que j'ai prises sur mon appareil photo que j'ai depuis supprimées de ma carte mémoire.
Les images manquantes de Shotwell contiennent des vignettes, mais je ne les trouve pas. J'ai donc décidé de lancer photorec
pour essayer de les trouver. En conséquence, photorec m'a fourni un grand nombre de dossiers et de fichiers, ce qui m'a permis de remplir mon disque dur. Au lieu de parcourir tous les fichiers un par un, j'ai décidé de rechercher des fichiers .cr2 sur mon disque dur, tout en évitant un dossier particulier appelé Photogs
que je ne connais pas, car ils ne faisaient pas partie de le photorec
vidage de données.
Habituellement, vous voudrez simplement ouvrir Shotwell et le faire glisser dans le dossier.
Si vous en avez besoin, vous pouvez demander au shell de créer une liste de fichiers CR2 et d'indiquer à Shotwell d'ouvrir uniquement ces fichiers. Parfois, cela peut être ce que vous voulez, mais dans ce cas qui n'a pas fait tout ce dont vous aviez besoin en raison du comportement de Shotwell - dans certaines autres circonstances, une fonctionnalité - d'afficher automatiquement vous autres fichiers image (de tous types) résidant dans les mêmes dossiers que les images que vous avez ouvertes.
Pour vous assurer que Shotwell ne connaît que les images qui vous intéressent, vous pouvez cloner l’arborescence de répertoires ailleurs, en ne copiant que les fichiers .cr2
et les dossiers qui les contiennent, mais rien d’autre. Cela peut cependant prendre beaucoup de place. Une autre approche consiste donc à construire une hiérarchie de liens symboliques - où, au lieu d’avoir une nouvelle arborescence de répertoires decopies devos fichiers originaux .cr2
, vous avez une nouvelle arborescence de répertoiressyminks versthem. Cela prend beaucoup moins de place.
Cette réponse couvre toutes ces approches.
Shotwell lui-même vous donne deux façons d'ouvrir une arborescence complète de photos. Si cela fonctionne pour vous, vous n'aurez à faire aucune action intelligente dans la ligne de commande, ni même à l'utiliser du tout. Sinon, vous pourriez le faire en liaison avec une autre technique. (Par exemple, si vous créez un nouveau répertoire de liens symboliques ou des copies de vos fichiers .cr2
, vous pouvez l’ouvrir de l’une des façons suivantes.)
Dans Shotwell, dans le menuFichier, cliquez surImporter du dossier. Sélectionnez ensuite le dossier à partir duquel vous souhaitez importer des images. Cela ne sera pas limité aux fichiers .cr2
, mais si vous ouvrez des fichiers à partir de plusieurs sous-dossiers contenant des images .cr2
créées à partir d'un appareil photo numérique, ceux-ci seront probablement les seuls fichiers présents.
Voir La réponse de Jakob à Afficher toutes les images de manière récursive (inclure les sous-dossiers) pour plus d'informations.
Avec la plupart des environnements de bureau et des navigateurs de fichiers, vous pouvez également ouvrir Shotwell et faire glisser le dossier contenant vos images dans la fenêtre Shotwell. CommeImporter du dossier, c'est une autre façon que Shotwell recommande d'ouvrir les photos.
Lorsque vous faites glisser une fenêtre du navigateur de fichiers ou votre bureau vers Shotwell, vous pouvez faire glisser une bibliothèque spécifique. Ou, si vous n'avez pas plusieurs bibliothèques configurées, vous pouvez simplement faire glisser n'importe où et tout fonctionne. (Vous n'avez même pas besoin de faire glisser dans le volet gauche.)
Cette méthode est très pratique et aussi puissante que la sélection manuelle du dossier (avecFichier>Importer du dossier, comme décrit ci-dessus). Lorsque vous ouvrez des fichiers ou des dossiers en utilisant l'une ou l'autre de ces méthodes , Shotwell vous offre la possibilité d'ouvrir les photos sans les copier dans sa bibliothèque.
Pour importer sans copier, cliquez surImporter sur placeau lieu deCopier les photos.
Si, pour une raison quelconque, vous souhaitez ou devez effectuer cette opération en exécutant une commande dans le terminal, vous pouvez exécuter la commande shotwell
et lui transmettre le nom de fichier de chaque image en tant qu'argument. Globstar facilite les choses:
shopt -s globstar
shotwell **/*.cr2
Cela ouvre les fichiers .cr2
situés n’importe où dans le répertoire en cours. Cela diffère de l'exécution de Shotwell et du déplacement du dossier, en ce sens que Shotwell essaiera uniquement d'importer les fichiers dont vous lui donnez le nom. Toutefois, comme Shotwell affiche souvent d’autres fichiers image provenant des mêmes dossiers que ceux que vous avez indiqués d’ouvrir, il se peut que cela ne corresponde pas à vos besoins. (Et Les informations supplémentaires que vous avez données sur votre problème suggèrent que ce n'est pas . Voir ci-dessous pour une alternative.)
Cela n'inclut pas les fichiers ni les sous-dossiers dont le nom commence par .
. Cependant, si vous avez des fichiers CR2 dont les noms commencent par un point, alors la plupart du temps, vous voudrez probablementdon't/ vouloir les ouvrir dans Shotwell de toute façon. À moins que vous n'ayez délibérément nommé vos fichiers ou vos dossiers de cette manière, un fichier point doté d'une extension de nom de fichier d'image ou de document est plus susceptible d'être un fichier de métadonnées que d'être une image ou un document réel. Par exemple, macOS ajoute souvent de tels fichiers (par exemple, ._kittens.cr2
pour une image réelle kittens.cr2
) lors de l'accès à un support externe (y compris des clés USB et des appareils photo numériques).
Si vous souhaitez rechercher également les fichiers dont le nom commence par .
ou qui se trouvent dans des dossiers dont le nom commence par .
, activez également dotglob. Vous pouvez le faire avec shopt -s dotglob
ou en passant globstar
et dotglob
à la variable shopt
:
shopt -s globstar dotglob
Par défaut, les globs sont sensibles à la casse. Mais vous voudrez peut-être faire correspondre les noms de fichiers sans tenir compte de la casse , de façon à ouvrir les fichiers se terminant par .cr2
, .Cr2
, .cR2
et .CR2
. Pour ce faire, soit:
Activez nocaseglob en exécutant shopt -s
avec nocaseglob
, seul ou avec d'autres options de shell. Par exemple, pour exécuter shotwell
sur tous les fichiers .cr2
, effectuez une recherche sans tenir compte de la casse et incluez les fichiers .
- et les fichiers dans les répertoires .
-:
shopt -s globstar dotglob nocaseglob
shotwell **/*.cr2
Or, utilisez .[cC][rR]2
au lieu de .cr2
dans votre modèle global lui-même. Par exemple, ceci accomplit la même chose que ci-dessus:
shopt -s globstar dotglob
shotwell **/*.[cC][rR]2
Notez que la distinction entre majuscules et minuscules et les minuscules .
correspond ou non à la casse. Vous pouvez supprimer dotglob
des exemples ci-dessus et ils peuvent toujours être insensibles à la casse.
Pour spécifier un répertoire plutôt que d'utiliser simplement le répertoire actuel, placez son nom et un /
avant le globule **/*.cr2
. Par exemple, le remplacement de la commande shotwell
ci-dessus par celle-ci ouvrira tous les fichiers .cr2
du sous-répertoire Pictures
de votre répertoire personnel:
shotwell ~/Pictures/**/*.cr2
Contrairement à la première commande qui utilise votre répertoire actuel, quel que soit l'endroit où vous exécutez cette commande, vous dites à Shotwell d'ouvrir les mêmes fichiers.
Si vous devez vraiment utiliser le terminal pour cela, je suppose que cela fait peut-être partie de quelque chose de plus complexe. Si vous le souhaitez, vous pouvez tester ces commandes avant de les exécuter réellement en remplaçant shotwell
par printf '%s\n'
. Au lieu de transmettre les noms de fichiers à Shotwell, cela les répertorie un par ligne. Par exemple, sur ma machine:
ek@Io:~$ printf '%s\n' ~/tmp/**/*.cr2
/home/ek/tmp/another image.cr2
/home/ek/tmp/image.cr2
/home/ek/tmp/some folder/image3.cr2
L’option Shell globstar doit être activée, ce que la commande shopt -s globstar
(ci-dessus) a fait. S'il est déjà activé, vous n'avez pas besoin de plusieurs commandes. Et il vous suffit de définir globstar une fois par instance de shell.
Vous pouvez désactiver globstar en exécutant:
shopt -u globstar
Et vous pouvezvérifiersi globstar est activé ou désactivé en exécutant:
shopt globstar
Si vous utilisez globstar dans un script, vous devez envisager de le désactiver s'il se peut que du code apparaisse ensuite dans le même script, mais qu'il ne soit pas écrit dans le but de globstar. Par exemple, écrire **
lorsque vous voulez dire *
ne pose généralement pas de problème lorsque Globstar est désactivé, mais si Globstar est activé, il peut en résulter de graves problèmes en faisant en sorte qu'une commande affecte beaucoup plus de fichiers que prévu.
De même, si vous utilisez dotglob ou nocaseglob et que vous souhaitez également les désactiver, vous pouvez le faire avec respectivement shopt -u dotglob
et shopt -u nocaseglob
. Vous pouvez également transmettre plusieurs options de shell à shopt -u
pour les supprimer en même temps. Par exemple, pour désactiver globstar,
dotglob
et nocaseglob
:
shopt -u globstar dotglob nocaseglob
Par rapport à Globstar, il y a moins d'erreurs graves que vous pourriez commettre parce que vous avez oublié de laisser dotglob ou nocaseglob. Mais d’autres personnes (y compris celles que vous consultez sur des sites tels que Ask Ubuntu) supposent généralement que dotglob et nocaseglob sont désactivées lorsqu’elles vous suggèrent d’utiliser des commandes, sauf indication contraire de votre part.
Pour plus d'informations sur ces options de shell liées aux glob (et également sur globs en général ), voir bash manuel de référence . Ils sont tous couverts principalement dans 4.3.2 The Shopt Builtin . Pour globstar, voir aussi 3.5.8.1 Pattern Matching . Pour dotglob, voir aussi 3.5.8 Expansion du nom de fichier .
Puisque dans votre cas vous semblez vraiment avoir besoin de Shotwell pour afficher les fichiersonly//.cr2
, vous avez des fichiers non -.cr2
dans les mêmes dossiers avec les fichiers .cr2
et une navigation dans les images dans Shotwell. offre automatiquement ces fichiers aussi , il semble que vous ayez besoin d'un dossier ne contenant pas d'autres fichiers image que les fichiers .cr2
que vous essayez d'ouvrir.
Déplacer les fichiers, comme vous l'avez suggéré , est une approche, mais je recommande plutôtcopierles fichiers ou, mieux,making liens symboliques aux fichiers(voir aussi FOLDOC ), car:
Vous devez également prendre une autre décision. Créez-vous toutes les nouvelles entrées (qu’il s’agisse de copies ou de liens symboliques) dans le même répertoire,flattening/ la hiérarchie de fichiers? Ou créez-vous des répertoires à la destination correspondant à chacun des répertoires de la source contenant au moins un fichier .cr2
?
En aplatissant la hiérarchie des fichiers, vous pouvez facilement voir tous les fichiers en même temps. En particulier, il est facile de voir les noms et la taille des fichiers en même temps, ainsi que de sélectionner n'importe quelle combinaison de fichiers dans un navigateur de fichiers graphique.
Mais il perd également des informations sur les dossiers dans lesquels ils se trouvaient, ce qui peut être utile (vous pouvez toutefois revenir au dossier d'origine et les rechercher si vous ne déplacez pas les fichiers).
Le plus gros problème avec l'aplatissement de la hiérarchie des fichiers, cependant, est ce qui se passe si vous avez deux fichiers ou plus du même nom à des endroits différents . Si vous aplatissez la hiérarchie des fichiers, selon la méthode utilisée, soit la copie (ou le lien) échouera, sauf la première, et vous obtiendrez une erreur ou un avertissement, ou la totalité (sauf la dernière copie) êtreécrasé.
C'est une autre raison pour laquelle je recommande de copier ou de créer des liens symboliques plutôt que de déplacer des fichiers. Si vous déplacez "avec succès" plusieurs fichiers dans le même fichier, vous avez tout perdu sauf le dernier!
En raison des inconvénients de tout aplatir dans un seul répertoire sans sous-répertoires, les approches que je prends icicréent un nouvel arbre de répertoiresà la destination.
Je montre ceci en premier parce que c'est un peu plus simple, mais je vous suggère plutôt de créer des liens symboliques ("Way 2"), surtout si le lecteur de destination n'a peut-être pas assez d'espace pour contenir tous les fichiers. "Way 2", qui est un peu plus compliqué, est beaucoup plus détaillé car il semble y avoir moins de ressources sur la façon d'utiliser cette technique, c'est ce que je pense que la plupart des gens dans cette situation préféreront, et des informations qui s'appliquent aux deux méthodes - des conseils de base sur l'échappement d'espaces dans les chemins - sont donnés ici plutôt qu'ici.
Lorsque vous devez copier une arborescence de répertoires et personnaliser l'opération de copie, vous devez généralement utiliser rsync
au lieu de cp
. C'est l'un de ces cas.
Remplacez src
par le chemin du répertoire de niveau supérieur contenant tous vos fichiers CR2 et remplacez dest
par le nom du répertoire que vous souhaitez créer, qui contiendra une hiérarchie de liens symboliques vers les fichiers CR2. Exécutez la procédure suivante:
rsync -rl --Prune-empty-dirs --include='*/' --include='*.cr2' --exclude='*' src/ dest
N'oubliez pas le /
après le nom du répertoire source, , à moins que vous ne souhaitiez créer un répertoire de niveau supérieur supplémentaire dansdest
. Autrement dit, si vous omettez le /
de fin, alors rsync
créera le répertoire de destination pour vous, dansdest
. Par exemple, supposons quesrc
est un chemin relatif ne contenant aucun /
. Ensuite:
src/
dans votre commande rsync
, vous obtenez un lien symbolique dest/foo/bar.cr2
pour le fichier src/foo/bar.cr2
.src
dans votre commande rsync
, vous obtenez un lien symbolique dest/src/foo/bar.cr2
pour le fichier src/foo/bar.cr2
.Étant donné que le répertoire de niveau supérieur où les liens symboliques seront placés doit porter le même nom que celui du répertoire de niveau supérieur contenant les fichiers .cr2
auxquels les liens symboliques pointeront, cela risque de prêter à confusion, je vous recommande donc d'inclure le /
à la fin de le nom du répertoire de destination dans votre commande rsync
. (Et, pour le répertoire source, donnez-lui un répertoire vide, inexistant ou dédié à cet usage. Sinon, vous encombrerez un autre dossier.)
Comme c'est généralement le cas lorsque vous transmettez le nom d'un fichier ou d'un répertoire à un programme ou un script de ligne de commande, si les chemins d'accès au répertoire source ou source contiennent des espaces vides (ou des caractères traités spécialement par le shell, tels que \
, $
, '
, et divers autres ponctuation), alors vous devrez les citer . J'ai expliqué en détail comment procéder, dans le cas le plus courant d'espaces, dans "Méthode 2" - les conseils concernant les citations dans cette section s'appliquent également dans ce cas. Cependant, si vous ne savez pas comment citer le nom d'un dossier, vous pouvez faire en sorte que Ubuntu le fasse pour vous en faisant simplement glisser le dossier dans Temrminal;son chemin complet sera collé avec la citation correcte.
Après avoir copié uniquement les fichiers .cr2
et les dossiers qui les contiennent, vous pouvez ouvrir le dossier de destination dans Shotwell. (Voir"Ouverture d'un dossier d'images (y compris les sous-dossiers) dans Shotwell"ci-dessus.) Cependant, avant d'exécuter rsync
, je vous recommande de décider si vous souhaitez ignorer les entrées commençant par .
et si vous le souhaitez. pour inclure des entrées avec des suffixes de variantes de casse. Si tel est le cas, vous devrez exécuter une commande rsync
légèrement différente.
Vous pouvez utiliser une autre commande rsync
pour indiquer si les fichiers et les répertoires commençant par un point doivent être ignorés et si vous souhaitez ou non tenir compte de la casse pour faire correspondre le suffixe .cr2
.
La commande ci-dessusdoesinclude contient les répertoires et les fichiers dont le nom commence par .
. . Pour exclure de tels fichiers et répertoires, placez --exclude='.*/' --exclude='.*'
avant tous les autres --include
s et --exclude
s. Autrement dit, utilisez plutôt cette commande rsync
(avec les substitutions appropriées poursrc
etdest
, bien sûr):
rsync -rl --Prune-empty-dirs --exclude='.*/' --exclude='.*' --include='*/' --include='*.cr2' --exclude='*' src/ dest
Les commandes rsync
présentées jusqu'ici ont été sensibles à la casse et ne copieront pas les fichiers se terminant par .CR2
, .Cr2
ou .cR2
au lieu de .cr2
. Si vous souhaitez que ces fichiers soient copiés, vous devrez en rendre compte en utilisant le modèle --include
*.[cC][rR]2
à la place de *.cr2
.
Cette troisième commande estinsensible à la casseet (comme la première commande)not/ ignore les fichiers et les répertoires dont le nom commence par .
:
rsync -rl --Prune-empty-dirs --include='*/' --include='*.[cC][rR]2' --exclude='*' src/ dest
Si vous choisissez de copier les fichiers avec rsync
et que vous ne savez pas laquelle de ces commandes vous voulez, , je vous suggère d'utiliser celui-ci si vous voulez vous assurer de ne rien manquer. Cependant, vous devez savoir que les fichiers de points peuvent contenir des métadonnées et que les fichiers de points nommés comme des images peuvent ne pas être réellement des images. Voir les discussions sur les fichiers de points dans la section"Lancer Shotwell avec une liste de noms de fichiers d'images"ci-dessus, et sur les fichiers de points et la sensibilité à la casse dans "Voie 2" ci-dessous.
Cette quatrième commande estinsensible à la casseet (comme la deuxième commande)doesignorer les fichiers et les répertoires dont le nom commence par .
:
rsync -rl --Prune-empty-dirs --exclude='.*/' --exclude='.*' --include='*/' --include='*.[cC][rR]2' --exclude='*' src/ dest
C’est ce que je vous recommande de faire, même si la voie 1 est acceptable si vous avez assez d’espace sur le lecteur de destination. Vous n'êtes pas obligé de lire la voie 1 pour l'utiliser.
La méthode présentée ici crée une liste de fichiers .cr2
et parcourt la liste en créant des répertoires cible, le cas échéant, et en les renseignant avec des liens symboliques vers chaque fichier .cr2
.
Ceci est juste assez compliqué pour que je suggère de le mettre dans un script plutôt que de le taper de manière interactive. Vous pouvez placer le script où bon vous semble, mais par souci de commodité, je vais vous montrer comment le faire avec le script placé directement dans votre dossier personnel.
Créez un fichier texte make-symlinks
dans votre dossier personnel. Aucune extension de fichier n'est nécessaire.
Vous pouvez le faire avec n’importe quel éditeur de texte, comme Vim, Nano, Gedit ou Leafpad. N'utilisez pas de traitement de texte tel que LibreOffice Writer. (Vous pouvez même le faire en exécutant cat > ~/make-symlinks
, en collant le contenu du fichier et en appuyant sur Ctrl+D sur une nouvelle ligne, si vous vouliez.)
Si vous appelez le script autrement que make-symlinks
, veillez à utiliser ce nom lors de l'exécution ultérieure de commandes utilisant le script.
#!/bin/bash
shopt -s globstar dotglob nocaseglob
for f in **/*.cr2; do
mkdir -p "$1/$(dirname "$f")"
ln -s "$PWD/$f" "$1/$f"
done
Mettez cela dans le fichier et enregistrez le fichier. Ce script utilise globstar, une fonctionnalité de Bash expliquée ci-dessus dans"Lancer Shotwell avec une liste de noms de fichiers images".
Selon vos besoins, vous voudrez peut-être apporter quelques modifications:
Si vous ne souhaitez pas inclure les fichiers .cr2
dont le nom commence par .
ou qui résident dans des répertoires dont le nom commence par .
, supprimez dotglob
de la ligne shopt
.
Les fichiers et les répertoires dont le nom commence par .
sont souvent utilisés pour les métadonnées (voir la section"Lancer Shotwell avec une liste de noms de fichiers d'images"ci-dessus). D'autre part, si vous voulez vous assurer que vous avez tout, ou s'il vous manque à peu près quelque chose inexplicablement, vous devriez alors garder dotglob
.
Si vous souhaitez inclure uniquement les fichiers se terminant exactement par .cr2
maisnot/ variantes de cas (.CR2
, .Cr2
et .cR2
), vous devez supprimer nocaseglob
. Puisque votre situation implique la récupération de données etShotwell ne vous montrera aucun des fichiers que vous avez manquéslorsque vous ouvrez le répertoire des liens symboliques - c’est le but de cette méthode, après tout - vous voudra probablement garder nocaseglob
.
Exécutez cette commande pour marquer votre script exécutable:
chmod +x ~/make-symlinks
Puis changez de répertoire dans le répertoire source, c’est-à-dire le dossier de niveau supérieur contenant les images. Par exemple, s'ils se trouvent dans le sous-répertoire Pictures
de votre répertoire personnel, vous exécuterez:
cd ~/Pictures
C'est là que vous allez exécuter le script. Passez le répertoire de destination au script en tant qu'argument de ligne de commande.
Par exemple, si vous souhaitez qu'un répertoire appelé cr2s
sur votre bureau contienne les liens symboliques, exécutez:
~/make-symlinks ~/Desktop/cr2s
Ou si vous voulez juste ce répertoire directement dans votre dossier personnel:
~/make-symlinks ~/cr2s
Ou si vous avez un lecteur monté sur /media/you/MyDrive
et que vous souhaitez créer un dossier appelé links
pour contenir les liens symboliques:
~/make-symlinks /media/you/MyDrive/links
Mais si le lecteur est /media/you/My Drive
(avec un espace), vous devez utiliser une citation. N'importe laquelle de ces œuvres (utilisez-en une seule, ne les exécutez pas toutes):
~/make-symlinks '/media/you/My Drive/links'
~/make-symlinks /media/you/'My Drive'/links
~/make-symlinks /media/you/My\ Drive/links
Mais si vous utilisez ~
pour votre répertoire personnel, ne citez pas cela:
~/make-symlinks ~/'Two Words' # good
~/make-symlinks ~/Two\ Words # good
~/make-symlinks '~/Two Words' # BAD, because ~ doesn't get expanded
make-symlinks
crée le répertoire de destination s'il n'existe pas déjà, tout comme il en crée des sous-répertoires. Cependant, cela fonctionne toujours si la destination existe déjà.
Vous pouvez même l'exécuter plusieurs fois et passer le même répertoire de destination (par exemple, si vous l'avez interrompu avec Ctrl+C), mais vous obtiendrez des erreurs failed to create symbolic link
pour les liens symboliques existants, ce qui pourrait prêter à confusion.
Vous ne souhaitez probablement pas transmettre le nom d'un répertoire existant et contenant des fichiers sans lien (comme votre répertoire de base) à make-symlinks
. Si vous le faites, vous pouvez vous attendre à créer toute une série de liens symboliques et de sous-dossiers. Vous voudrez probablement utiliser un nouveau répertoire - ou un répertoire qui n'existe pas encore - pour make-symlinks
.
Après avoir exécuté make-symlinks
, importez simplement le répertoire que vous lui avez transmis dans Shotwell, en utilisant l’une des méthodes indiquées dans la première partie de cette réponse ("Ouverture d’un dossier contenant des images (y compris les sous-dossiers) dans Shotwell"). Par exemple, vous pouvez ouvrir Shotwell et faire glisser le dossier dans.
Étant donné que toutes les entrées du dossier sont des liens symboliques vers des fichiers .cr2
ou des répertoires les contenant, sans aucun autre type de fichier, Shotwell ne devrait voir aucun des autres fichiers.
Shotwell parcourt toutes les images présentes dans tous les répertoires dans lesquels une image est ouverte. Il est donc inutile d’utiliser find -name '*.cr2' -exec shotwell '{}' +
comme je l’avais suggéré initialement. Étant donné que les paramètres de Shotwell sont plutôt limités, la seule façon pour moi d’ouvrir uniquement les fichiers de votre choix est de les déplacer eux-mêmes dans un nouveau répertoire.
Vous pouvez utiliser find
pour cela:
mkdir ~/cr2files
find -type f -iname '*.cr2' -not -path './dir/*' -exec cp -v -- '{}' ~/cr2files \;
Remplacez cp
par mv
si vous souhaitez éviter de créer des fichiers en double.
mkdir ~/cr2files
crée un nouveau répertoire dans votre répertoire personnelfind
recherche récursive du répertoire actuel vers le bas à travers l'arborescence-type f
rechercher uniquement des fichiers-iname
recherche les fichiers par nom, en ignorant la casse'*.cr2'
noms se terminant par .cr2
- utilisez des guillemets pour empêcher le shell de développer le glob avant qu'il ne soit passé à find
-not -path './dir/*'
exclura le contenu du répertoire dir
des résultats{}
représente les chemins des fichiers trouvés--
après cp
indique à cp
de n'accepter aucune autre option, ce qui évite tout nom de fichier commençant par -
et posant des problèmesVous pouvez ensuite ouvrir n’importe quel fichier du nouveau répertoire avec Shotwell et les parcourir tous.
xargs
lorsque les noms de fichiers contiennent des espacesComme l'ont souligné les commentaires ci-dessous, l'utilisation de back ticks
(Option 3 ci-dessous) s'interrompt lorsque les noms de fichiers contiennent des espaces. La méthode plus sûre consistant à utiliser la commande find
et à transmettre la sortie à shotwell
à l'aide de l'option xargs
se présente comme suit:
find . -name "*.cr2" -print0 | xargs -0 shotwell
Le drapeau -print0
indique à find d'utiliser \0
délimiteurs (caractères nuls) entre les noms de fichiers, et le drapeau -0
indique à xargs
d'attendre ces \0
délimiteurs.
Crédits aux excellentes réponses trouvées ici ( Comment rediffuser la liste des fichiers renvoyés par la commande find ) sur Stack Overflow.
-exec
lorsque les noms de fichiers contiennent des espacesComme le souligne un commentaire ci-dessous, l'option -exec
prend également en charge les noms de fichiers contenant des espaces. Les autres commentaires ci-dessous indiquent que cela se casse lorsque le nombre de fichiers est supérieur. Cela ressemblerait à ceci:
find . -name "*.cr2" -exec shotwell {} +
Auparavant, avant que les noms de fichiers aient des espaces et devenaient 256 caractères, cette option fonctionnait bien. Vous trouverez cette option mentionnée sur de nombreux autres sites Web, mais vous ne devez pas utiliser cette option . De retour dans la journée, utiliser la commande find
et transmettre le résultat à shotwell
était la méthode la plus simple:
shotwell `find . -name "*.cr2"`
Ceci démarre la find
du répertoire en cours et inclut tous les sous-répertoires:
$(...)
dans bash..
donne à find
un point de départ qui correspond au répertoire en cours. Vous pouvez passer /home/$USER/Pictures
ou quelque chose d'autre à la place de .
.-name
indique à find de rechercher des noms de fichiers (et non des répertoires).shotwell
. Vous pouvez l'utiliser pour cat
, head
, tail
et la plupart des commandes Linux courantes.