Dans Bash, supposons que je visite un répertoire, puis un autre répertoire. Je voudrais copier un fichier du premier répertoire vers le deuxième répertoire, mais sans en spécifier les longs chemins d'accès. C'est possible?
Ma solution temporaire consiste à utiliser /tmp
comme un emplacement temporaire pour stocker une copie du fichier. cp myfile /tmp
quand je suis dans le premier répertoire, puis cp /tmp/myfile .
quand je suis dans le deuxième répertoire. Mais je peux vérifier si le fichier remplacera quoi que ce soit /tmp
.
Existe-t-il quelque chose de similaire à un presse-papiers pour copier et coller un fichier?
cd
commande, vous pouvez donc simplementcd -
revenir au répertoire précédent, flèche vers le haut pour rappeler lacd
commande et modifier la ligne pour être à lacp
place decd
. (ctrl-a (début de ligne), alt-d (mot-clé)cp -a
,, ctrl-e (fin de ligne)).M-x term
vous pouvez utiliser le presse-papiers d'Emacs.Réponses:
En utilisant Bash, je visiterais simplement les répertoires:
Ensuite, j'utiliserais le raccourci
~-
, qui pointe vers le répertoire précédent:Si l'on veut visiter les répertoires dans l'ordre inverse, alors:
la source
"$OLDPWD"
.cp
Mais pourquoi trois commandes distinctes ?cp -a ~-/file[1-3].txt .
cp
sont des exemples. Dans le monde réel, les caractères génériques peuvent également être utilisés pour simplifier la tâche de copie.pushd
et analyserdirs
... mais c'est beaucoup, beaucoup mieux. Je vous suggère d'ajouter le fait qu'il"$OLDPWD"
est exactement équivalent~-
et plus portable (utile pour ceux qui n'utilisent pasbash
.)~+
est également un raccourci pour"$PWD"
Si je voyais cette situation comme unique, je pourrais:
S'il y avait des répertoires dans lesquels je me trouvais à copier des fichiers de manière semi-régulière, je définirais probablement des variables mnémoniques pour eux dans mon .profile.
Modifié pour ajouter:
Après avoir dormi dessus, je me suis demandé dans quelle mesure je pouvais me rapprocher d'autres comportements GUI / OS où vous sélectionnez un certain nombre de fichiers, les "coupez" ou les "copiez", puis les "collez" ailleurs. Le meilleur mécanisme de sélection que j'ai pu trouver était votre cerveau / vos préférences ainsi que la fonction de globbing de la coquille. Je ne suis pas très créatif avec le nommage, mais c'est l'idée de base (dans la syntaxe Bash):
Pour l'utiliser, placez le code dans ~ / .bash_profile, puis
cd
dans le répertoire source et exécutez soitcopyfiles glob*here
oucutfiles glob*here
. Tout ce qui se passe, c'est que votre shell développe les globes et place ces noms de fichiers dans un tableau. Vous accédez ensuitecd
au répertoire de destination et exécutezpastefiles
, qui exécute unecp
commande pour chaque fichier source. Si vous aviez auparavant "coupé" les fichiers, alors pastefiles supprime également le fichier source (ou essaie de le faire). Cela ne fait aucune vérification d'erreur (des fichiers existants, avant de potentiellement les encombrer avec lecp
; ou que vous avez les autorisations pour supprimer les fichiers pendant une "coupe", ou que vous pouvez accéder à nouveau au répertoire source après avoir quitté de celui-ci).la source
$OLDPWD
existe déjà, qui peut être raccourci~-
en bash et zsh.Je pense que
~-
c'est la bonne réponse, mais notez que bash a un éditeur de ligne intégré qui peut copier / coller du texte.Si vous êtes en mode emacs, vous pouvez rappeler votre
cd
commande à partir de l'historique et l'utiliser Control-upour tuer la ligne dans le "presse-papier" bash appelé le kill-ring (il existe également d'autres moyens). Vous pouvez ensuite extraire cette chaîne dans une nouvelle commande à tout moment avec Control-y. Évidemment, dans votre exemple, cela dépend de votre utilisation d'un nom de répertoire absolu dans votrecd
commande.Vous pouvez également utiliser le raccourci clavier par défaut intéressant de Meta-.. Cela copie le dernier mot de la commande précédente dans votre ligne actuelle. S'il est répété, il revient à chaque fois une commande dans l'historique. Donc , si vous faites
cd /x
, puiscd /y
suivi ,cd
Meta-.Meta-.vous aurez/x
dans votre entrée.la source
Développant la réponse d'Anderson M. Gomes , Bash vous permet de faire référence à n'importe quel répertoire antérieur de votre pile de répertoires en tapant
~N
(ou~+N
) où seN
trouve la position sur la pile de répertoires . Par exemple:Vous pouvez maintenant copier un fichier entre deux répertoires antérieurs, aucun d'entre eux le répertoire actuel, avec:
Pour résoudre le problème de l'affiche originale, vous feriez:
Avec un grand ensemble de fichiers, vous pouvez lister leurs noms dans un fichier manifeste puis faire la copie à partir du répertoire source:
Voir aussi: cette section de la page de manuel de Bash
De même, dans Tcsh, vous pouvez utiliser la
=2
notation (plutôt que~2
) pour faire référence au deuxième répertoire de votre pile de répertoires.Voir aussi: cette section de la page de manuel Tcsh
la source
lorsque vous êtes dans le premier répertoire, disons la source ou
src
en bref, exécutezpuis
cd
dans le deuxième répertoire et exécutez:l'
-i
option vous demandera si vous souhaitez remplacer, s'il y a un fichier en doublela source
Une variation de la réponse d'anderson-m-gomes. En utilisant Bash, je visiterais simplement les répertoires:
Ensuite, j'utiliserais la variable $ OLDPWD, qui pointe vers le répertoire précédent:
Si l'on veut visiter les répertoires dans l'ordre inverse, alors:
la source
$OLDPWD
contient des espaces, cela se casse. Aussi, j'utilise toujourscp -a
. De plus, il est regrettable que la complétion de tabulation soit interrompue sur les extensions variables. Cependant, vous pouvez utiliser ctrl-alt-e pour développer la ligne de commande en cours après avoir tapé la partie $ OLDPWD.~-
est un raccourci pour$OLDPWD
Si en bash, j'utiliserais pushd et popd . Ces commandes conservent une pile FIFO pratique de répertoires pour une utilisation ultérieure. Vous pouvez consulter la pile à tout moment à l'aide de dirs .
En tant que tel, je ferais:
la source
Vous pouvez utiliser
xclip
:Exemple:
Visitez également xsel .
la source
tar | gzip
entrée / sortie du presse-papiers X. Un peu maladroit par rapport àcp
, et ne se généralise pas à faire des liens symboliques ou des liens durs. (cp -as
oucp -al
)Vous pouvez consulter le
clipboard-files
script ici: https://github.com/larspontoppidan/clipboard-filesIl fournit des commandes comme
ccopy
,ccut
etcpaste
qui utilisent le presse-papiers de l'environnement de bureau et permettent un copier / coller intuitif des fichiers:Lorsque le presse-papiers de l'environnement de bureau est utilisé, le copier / coller interagira avec les fichiers placés dans le presse-papiers dans d'autres programmes tels que les gestionnaires de fichiers et les IDE. Au moins, cela fonctionne sur les ordinateurs de bureau de type Gnome.
Divulgation complète, j'ai écrit le script après avoir renoncé à trouver quelque chose comme ça là-bas ...
la source