Existe-t-il un moyen astucieux de copier et de déplacer des opérations ou une commande permettant de dupliquer un fichier, sans avoir à faire un cd
, puis mv
après, dans le même dossier?
Par exemple, je dois exécuter ce qui suit:
mv /folder1/folder2/folder3/file.txt /folder1/folder2/folder3/file-2013.txt
Notez que le répertoire dans lequel je déplace le fichier est le même, mais je dois mettre le chemin complet à nouveau et parfois cela devient agaçant. Je suis curieux de savoir s'il existe un autre moyen de le faire sans avoir à refaire tout le chemin , car l'opération se ferait dans le même chemin.
Réponses:
Il suffit d'utiliser l' expansion de corset :
Cela équivaut à écrire:
L'expansion de l'accolade vous permet naturellement de fournir plus d'arguments Vous pouvez même lui transmettre des plages, par exemple, pour créer quelques dossiers de test, vous pouvez l'exécuter
mkdir test_{a..z}
, et à partir de Bash 4, vous pouvez créer des séquences sans remplissage, ainsi que danstouch foo{0001..3}
, ce qui créefoo0001
,foo0002
etfoo0003
. Le wiki de Bash Hackers contient un article avec quelques exemples pour vous.Si vous devez utiliser deux commandes différentes, utilisez un sous-shell et
cd
là - bas, comme dans la réponse de @ Ignacio .la source
brace
extension, merci!meniac ~: mv /tmp/f1/f2/f3/f4/f5/f6/{file.txt, file2.txt} mv: cannot stat ``/tmp/f1/f2/f3/f4/f5/f6/{file.txt,': No such file or directory
/bin/bash
, et que vous n'êtes pas dans un script/bin/sh
inclus dans shebang ou dans un autre shell qui ne prend pas en charge le développement d'accolades? Si tu coursset
, est-ce que tuSHELLOPTS
contiensbraceexpand
?file.txt,
etfile2.txt
.mv /folder1/folder2/folder3/file{,-2013}.txt
Exécutez l'opération dans un sous-shell.
Le changement de répertoire de travail ne sera pas propagé au shell parent.
la source
ash
,dash
,ksh88
Sans parler de l'ancienne bourne shell sont des coquilles de ne le soutiennent.Si vous voulez intelligent, voici l' expansion de l'histoire bash
Je ne l'utiliserais pas moi-même car je trouve impossible de le mémoriser. J'utilise occasionnellement l' équivalent vim , mais je dois le rechercher presque à chaque fois.
la source
Vous pouvez définir une variable. Bien sûr, cela a pour effet secondaire de laisser les variables autour.
la source
(D="/folder1/folder2/folder3"; mv "$D"/file.txt "$D"/file-2013.txt)
ou simplement en ajoutant uneunset
commande à la fin. (J'ai ajouté des guillemets en guise de «pratique exemplaire»; si vous prenez l'habitude de toujours utiliser des guillemets, vous ne devez pas vous arrêter et vous gratter la tête lorsqu'un chemin comportant des caractères spéciaux se présente.)cd
de définir une variable. Pas beaucoup plus facile, je l'avoue.J'aime les autres solutions, mais en voici une autre, implémentée sous forme de script avec des tableaux bash, pushd, popd:
la source
Slhck répond directement à la question de la manière la plus simple possible, mais Valter apprécie également la réponse automatique, alors voici une réponse qui va dans le même sens.
la source