Is there an equivalent of cd - for cp or mv





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







14















In Bash and similar shells cd - changes the current directory to a previously visited one. It's often very handy. I wonder if there is similar shorthand for copying or moving files, like:



~/project-a/ $ cd ../project-b
~/project-b/ $ cp Makefile LICENSE - # this won't work, hence the question


I'd be also happy with zsh specific answers.










share|improve this question


















  • 5





    With bash: Instead of - press Esc and then . to get from last command its last argument (here: ../project-b).

    – Cyrus
    Mar 31 at 15:06











  • That's true @Cyrus, but in the example the intention is to copy from project-b to project-a.

    – Tad Lispy
    Mar 31 at 15:19













  • @Cyrus, I was always aware that bash has some Emacs-like key bindings and am a heavy Emacs user myself. I was always happily using the general line movement keys of emacs on the shell (C-a etc.). But your comment prompted me to actually look for key bindings in man bash. Holy moly... it really is Emacs-like, complete with the kill ring, the mark semantics (C-space) etc. Thanks for bringing that up.

    – AnoE
    Apr 1 at 11:15




















14















In Bash and similar shells cd - changes the current directory to a previously visited one. It's often very handy. I wonder if there is similar shorthand for copying or moving files, like:



~/project-a/ $ cd ../project-b
~/project-b/ $ cp Makefile LICENSE - # this won't work, hence the question


I'd be also happy with zsh specific answers.










share|improve this question


















  • 5





    With bash: Instead of - press Esc and then . to get from last command its last argument (here: ../project-b).

    – Cyrus
    Mar 31 at 15:06











  • That's true @Cyrus, but in the example the intention is to copy from project-b to project-a.

    – Tad Lispy
    Mar 31 at 15:19













  • @Cyrus, I was always aware that bash has some Emacs-like key bindings and am a heavy Emacs user myself. I was always happily using the general line movement keys of emacs on the shell (C-a etc.). But your comment prompted me to actually look for key bindings in man bash. Holy moly... it really is Emacs-like, complete with the kill ring, the mark semantics (C-space) etc. Thanks for bringing that up.

    – AnoE
    Apr 1 at 11:15
















14












14








14


1






In Bash and similar shells cd - changes the current directory to a previously visited one. It's often very handy. I wonder if there is similar shorthand for copying or moving files, like:



~/project-a/ $ cd ../project-b
~/project-b/ $ cp Makefile LICENSE - # this won't work, hence the question


I'd be also happy with zsh specific answers.










share|improve this question














In Bash and similar shells cd - changes the current directory to a previously visited one. It's often very handy. I wonder if there is similar shorthand for copying or moving files, like:



~/project-a/ $ cd ../project-b
~/project-b/ $ cp Makefile LICENSE - # this won't work, hence the question


I'd be also happy with zsh specific answers.







linux bash file-transfer zsh






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Mar 31 at 14:57









Tad LispyTad Lispy

313310




313310








  • 5





    With bash: Instead of - press Esc and then . to get from last command its last argument (here: ../project-b).

    – Cyrus
    Mar 31 at 15:06











  • That's true @Cyrus, but in the example the intention is to copy from project-b to project-a.

    – Tad Lispy
    Mar 31 at 15:19













  • @Cyrus, I was always aware that bash has some Emacs-like key bindings and am a heavy Emacs user myself. I was always happily using the general line movement keys of emacs on the shell (C-a etc.). But your comment prompted me to actually look for key bindings in man bash. Holy moly... it really is Emacs-like, complete with the kill ring, the mark semantics (C-space) etc. Thanks for bringing that up.

    – AnoE
    Apr 1 at 11:15
















  • 5





    With bash: Instead of - press Esc and then . to get from last command its last argument (here: ../project-b).

    – Cyrus
    Mar 31 at 15:06











  • That's true @Cyrus, but in the example the intention is to copy from project-b to project-a.

    – Tad Lispy
    Mar 31 at 15:19













  • @Cyrus, I was always aware that bash has some Emacs-like key bindings and am a heavy Emacs user myself. I was always happily using the general line movement keys of emacs on the shell (C-a etc.). But your comment prompted me to actually look for key bindings in man bash. Holy moly... it really is Emacs-like, complete with the kill ring, the mark semantics (C-space) etc. Thanks for bringing that up.

    – AnoE
    Apr 1 at 11:15










5




5





With bash: Instead of - press Esc and then . to get from last command its last argument (here: ../project-b).

– Cyrus
Mar 31 at 15:06





With bash: Instead of - press Esc and then . to get from last command its last argument (here: ../project-b).

– Cyrus
Mar 31 at 15:06













That's true @Cyrus, but in the example the intention is to copy from project-b to project-a.

– Tad Lispy
Mar 31 at 15:19







That's true @Cyrus, but in the example the intention is to copy from project-b to project-a.

– Tad Lispy
Mar 31 at 15:19















@Cyrus, I was always aware that bash has some Emacs-like key bindings and am a heavy Emacs user myself. I was always happily using the general line movement keys of emacs on the shell (C-a etc.). But your comment prompted me to actually look for key bindings in man bash. Holy moly... it really is Emacs-like, complete with the kill ring, the mark semantics (C-space) etc. Thanks for bringing that up.

– AnoE
Apr 1 at 11:15







@Cyrus, I was always aware that bash has some Emacs-like key bindings and am a heavy Emacs user myself. I was always happily using the general line movement keys of emacs on the shell (C-a etc.). But your comment prompted me to actually look for key bindings in man bash. Holy moly... it really is Emacs-like, complete with the kill ring, the mark semantics (C-space) etc. Thanks for bringing that up.

– AnoE
Apr 1 at 11:15












2 Answers
2






active

oldest

votes


















28














If your shell has cd -, then it will likely have either the special variable $OLDPWD and/or the shortcut ~- for the directory you've been in previously.



cp Makefile LICENSE "$OLDPWD/"

cp Makefile LICENSE ~-

cat ~-/Makefile


Indeed the POSIX shell language (upon which ksh/bash/zsh are built) specifies that cd - should be equal to cd "$OLDPWD".






share|improve this answer





















  • 1





    Tilde expansion has a lot more to it even than that. For an additional taste, unix.stackexchange.com/a/286628/135943 and that doesn’t even cover home directories.

    – Wildcard
    Mar 31 at 21:50





















5














You can always use shell backquotes.



They act like a subshell : the command in the backquotes is executed first, and its output is placed as argument of the main command.



~/folderA$ cd ../folderB  
~/folderB$ cp Makefile `cd -`
# gets expended to "cp Makefile ~/folderA"





share|improve this answer








New contributor




Nathanael C. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 4





    No, the command cd - outputs nothing, so `cd -` expands to the empty string. Try the command % echo `cd -` to verify. You would need to use something like % echo `cd -; pwd` ...

    – Neal Young
    Apr 1 at 0:21








  • 2





    @NealYoung: It seems that there’s something wrong with your shell. POSIX says “When a <hyphen-minus> is used as the operand [to cd], this shall be equivalent to the command: cd "$OLDPWD" && pwd, which changes to the previous working directory and then writes its name.” … (Cont’d)

    – G-Man
    Apr 1 at 2:36






  • 1





    (Cont’d) …  And bash(1) says “An argument of - is converted to $OLDPWD before the directory change is attempted.  If a non-empty directory name from CDPATH is used, or if - is the first argument, and the directory change is successful, the absolute pathname of the new working directory is written to the standard output.”

    – G-Man
    Apr 1 at 2:36











  • @Nathanael C.: But please use "$(cd -)".

    – G-Man
    Apr 1 at 2:40













  • There's only "something wrong" if the shell claims POSIX compliance, and I think it's perfectly normal for shells that weren't invoked as /bin/sh and aren't specifically trying to emulate a POSIX shell to implement their language in whatever way they want...

    – grawity
    Apr 1 at 3:55












Your Answer








StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "3"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1419624%2fis-there-an-equivalent-of-cd-for-cp-or-mv%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























2 Answers
2






active

oldest

votes








2 Answers
2






active

oldest

votes









active

oldest

votes






active

oldest

votes









28














If your shell has cd -, then it will likely have either the special variable $OLDPWD and/or the shortcut ~- for the directory you've been in previously.



cp Makefile LICENSE "$OLDPWD/"

cp Makefile LICENSE ~-

cat ~-/Makefile


Indeed the POSIX shell language (upon which ksh/bash/zsh are built) specifies that cd - should be equal to cd "$OLDPWD".






share|improve this answer





















  • 1





    Tilde expansion has a lot more to it even than that. For an additional taste, unix.stackexchange.com/a/286628/135943 and that doesn’t even cover home directories.

    – Wildcard
    Mar 31 at 21:50


















28














If your shell has cd -, then it will likely have either the special variable $OLDPWD and/or the shortcut ~- for the directory you've been in previously.



cp Makefile LICENSE "$OLDPWD/"

cp Makefile LICENSE ~-

cat ~-/Makefile


Indeed the POSIX shell language (upon which ksh/bash/zsh are built) specifies that cd - should be equal to cd "$OLDPWD".






share|improve this answer





















  • 1





    Tilde expansion has a lot more to it even than that. For an additional taste, unix.stackexchange.com/a/286628/135943 and that doesn’t even cover home directories.

    – Wildcard
    Mar 31 at 21:50
















28












28








28







If your shell has cd -, then it will likely have either the special variable $OLDPWD and/or the shortcut ~- for the directory you've been in previously.



cp Makefile LICENSE "$OLDPWD/"

cp Makefile LICENSE ~-

cat ~-/Makefile


Indeed the POSIX shell language (upon which ksh/bash/zsh are built) specifies that cd - should be equal to cd "$OLDPWD".






share|improve this answer















If your shell has cd -, then it will likely have either the special variable $OLDPWD and/or the shortcut ~- for the directory you've been in previously.



cp Makefile LICENSE "$OLDPWD/"

cp Makefile LICENSE ~-

cat ~-/Makefile


Indeed the POSIX shell language (upon which ksh/bash/zsh are built) specifies that cd - should be equal to cd "$OLDPWD".







share|improve this answer














share|improve this answer



share|improve this answer








edited Mar 31 at 15:28

























answered Mar 31 at 15:20









grawitygrawity

243k37512570




243k37512570








  • 1





    Tilde expansion has a lot more to it even than that. For an additional taste, unix.stackexchange.com/a/286628/135943 and that doesn’t even cover home directories.

    – Wildcard
    Mar 31 at 21:50
















  • 1





    Tilde expansion has a lot more to it even than that. For an additional taste, unix.stackexchange.com/a/286628/135943 and that doesn’t even cover home directories.

    – Wildcard
    Mar 31 at 21:50










1




1





Tilde expansion has a lot more to it even than that. For an additional taste, unix.stackexchange.com/a/286628/135943 and that doesn’t even cover home directories.

– Wildcard
Mar 31 at 21:50







Tilde expansion has a lot more to it even than that. For an additional taste, unix.stackexchange.com/a/286628/135943 and that doesn’t even cover home directories.

– Wildcard
Mar 31 at 21:50















5














You can always use shell backquotes.



They act like a subshell : the command in the backquotes is executed first, and its output is placed as argument of the main command.



~/folderA$ cd ../folderB  
~/folderB$ cp Makefile `cd -`
# gets expended to "cp Makefile ~/folderA"





share|improve this answer








New contributor




Nathanael C. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 4





    No, the command cd - outputs nothing, so `cd -` expands to the empty string. Try the command % echo `cd -` to verify. You would need to use something like % echo `cd -; pwd` ...

    – Neal Young
    Apr 1 at 0:21








  • 2





    @NealYoung: It seems that there’s something wrong with your shell. POSIX says “When a <hyphen-minus> is used as the operand [to cd], this shall be equivalent to the command: cd "$OLDPWD" && pwd, which changes to the previous working directory and then writes its name.” … (Cont’d)

    – G-Man
    Apr 1 at 2:36






  • 1





    (Cont’d) …  And bash(1) says “An argument of - is converted to $OLDPWD before the directory change is attempted.  If a non-empty directory name from CDPATH is used, or if - is the first argument, and the directory change is successful, the absolute pathname of the new working directory is written to the standard output.”

    – G-Man
    Apr 1 at 2:36











  • @Nathanael C.: But please use "$(cd -)".

    – G-Man
    Apr 1 at 2:40













  • There's only "something wrong" if the shell claims POSIX compliance, and I think it's perfectly normal for shells that weren't invoked as /bin/sh and aren't specifically trying to emulate a POSIX shell to implement their language in whatever way they want...

    – grawity
    Apr 1 at 3:55
















5














You can always use shell backquotes.



They act like a subshell : the command in the backquotes is executed first, and its output is placed as argument of the main command.



~/folderA$ cd ../folderB  
~/folderB$ cp Makefile `cd -`
# gets expended to "cp Makefile ~/folderA"





share|improve this answer








New contributor




Nathanael C. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 4





    No, the command cd - outputs nothing, so `cd -` expands to the empty string. Try the command % echo `cd -` to verify. You would need to use something like % echo `cd -; pwd` ...

    – Neal Young
    Apr 1 at 0:21








  • 2





    @NealYoung: It seems that there’s something wrong with your shell. POSIX says “When a <hyphen-minus> is used as the operand [to cd], this shall be equivalent to the command: cd "$OLDPWD" && pwd, which changes to the previous working directory and then writes its name.” … (Cont’d)

    – G-Man
    Apr 1 at 2:36






  • 1





    (Cont’d) …  And bash(1) says “An argument of - is converted to $OLDPWD before the directory change is attempted.  If a non-empty directory name from CDPATH is used, or if - is the first argument, and the directory change is successful, the absolute pathname of the new working directory is written to the standard output.”

    – G-Man
    Apr 1 at 2:36











  • @Nathanael C.: But please use "$(cd -)".

    – G-Man
    Apr 1 at 2:40













  • There's only "something wrong" if the shell claims POSIX compliance, and I think it's perfectly normal for shells that weren't invoked as /bin/sh and aren't specifically trying to emulate a POSIX shell to implement their language in whatever way they want...

    – grawity
    Apr 1 at 3:55














5












5








5







You can always use shell backquotes.



They act like a subshell : the command in the backquotes is executed first, and its output is placed as argument of the main command.



~/folderA$ cd ../folderB  
~/folderB$ cp Makefile `cd -`
# gets expended to "cp Makefile ~/folderA"





share|improve this answer








New contributor




Nathanael C. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.










You can always use shell backquotes.



They act like a subshell : the command in the backquotes is executed first, and its output is placed as argument of the main command.



~/folderA$ cd ../folderB  
~/folderB$ cp Makefile `cd -`
# gets expended to "cp Makefile ~/folderA"






share|improve this answer








New contributor




Nathanael C. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this answer



share|improve this answer






New contributor




Nathanael C. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









answered Mar 31 at 21:34









Nathanael C.Nathanael C.

511




511




New contributor




Nathanael C. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Nathanael C. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Nathanael C. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








  • 4





    No, the command cd - outputs nothing, so `cd -` expands to the empty string. Try the command % echo `cd -` to verify. You would need to use something like % echo `cd -; pwd` ...

    – Neal Young
    Apr 1 at 0:21








  • 2





    @NealYoung: It seems that there’s something wrong with your shell. POSIX says “When a <hyphen-minus> is used as the operand [to cd], this shall be equivalent to the command: cd "$OLDPWD" && pwd, which changes to the previous working directory and then writes its name.” … (Cont’d)

    – G-Man
    Apr 1 at 2:36






  • 1





    (Cont’d) …  And bash(1) says “An argument of - is converted to $OLDPWD before the directory change is attempted.  If a non-empty directory name from CDPATH is used, or if - is the first argument, and the directory change is successful, the absolute pathname of the new working directory is written to the standard output.”

    – G-Man
    Apr 1 at 2:36











  • @Nathanael C.: But please use "$(cd -)".

    – G-Man
    Apr 1 at 2:40













  • There's only "something wrong" if the shell claims POSIX compliance, and I think it's perfectly normal for shells that weren't invoked as /bin/sh and aren't specifically trying to emulate a POSIX shell to implement their language in whatever way they want...

    – grawity
    Apr 1 at 3:55














  • 4





    No, the command cd - outputs nothing, so `cd -` expands to the empty string. Try the command % echo `cd -` to verify. You would need to use something like % echo `cd -; pwd` ...

    – Neal Young
    Apr 1 at 0:21








  • 2





    @NealYoung: It seems that there’s something wrong with your shell. POSIX says “When a <hyphen-minus> is used as the operand [to cd], this shall be equivalent to the command: cd "$OLDPWD" && pwd, which changes to the previous working directory and then writes its name.” … (Cont’d)

    – G-Man
    Apr 1 at 2:36






  • 1





    (Cont’d) …  And bash(1) says “An argument of - is converted to $OLDPWD before the directory change is attempted.  If a non-empty directory name from CDPATH is used, or if - is the first argument, and the directory change is successful, the absolute pathname of the new working directory is written to the standard output.”

    – G-Man
    Apr 1 at 2:36











  • @Nathanael C.: But please use "$(cd -)".

    – G-Man
    Apr 1 at 2:40













  • There's only "something wrong" if the shell claims POSIX compliance, and I think it's perfectly normal for shells that weren't invoked as /bin/sh and aren't specifically trying to emulate a POSIX shell to implement their language in whatever way they want...

    – grawity
    Apr 1 at 3:55








4




4





No, the command cd - outputs nothing, so `cd -` expands to the empty string. Try the command % echo `cd -` to verify. You would need to use something like % echo `cd -; pwd` ...

– Neal Young
Apr 1 at 0:21







No, the command cd - outputs nothing, so `cd -` expands to the empty string. Try the command % echo `cd -` to verify. You would need to use something like % echo `cd -; pwd` ...

– Neal Young
Apr 1 at 0:21






2




2





@NealYoung: It seems that there’s something wrong with your shell. POSIX says “When a <hyphen-minus> is used as the operand [to cd], this shall be equivalent to the command: cd "$OLDPWD" && pwd, which changes to the previous working directory and then writes its name.” … (Cont’d)

– G-Man
Apr 1 at 2:36





@NealYoung: It seems that there’s something wrong with your shell. POSIX says “When a <hyphen-minus> is used as the operand [to cd], this shall be equivalent to the command: cd "$OLDPWD" && pwd, which changes to the previous working directory and then writes its name.” … (Cont’d)

– G-Man
Apr 1 at 2:36




1




1





(Cont’d) …  And bash(1) says “An argument of - is converted to $OLDPWD before the directory change is attempted.  If a non-empty directory name from CDPATH is used, or if - is the first argument, and the directory change is successful, the absolute pathname of the new working directory is written to the standard output.”

– G-Man
Apr 1 at 2:36





(Cont’d) …  And bash(1) says “An argument of - is converted to $OLDPWD before the directory change is attempted.  If a non-empty directory name from CDPATH is used, or if - is the first argument, and the directory change is successful, the absolute pathname of the new working directory is written to the standard output.”

– G-Man
Apr 1 at 2:36













@Nathanael C.: But please use "$(cd -)".

– G-Man
Apr 1 at 2:40







@Nathanael C.: But please use "$(cd -)".

– G-Man
Apr 1 at 2:40















There's only "something wrong" if the shell claims POSIX compliance, and I think it's perfectly normal for shells that weren't invoked as /bin/sh and aren't specifically trying to emulate a POSIX shell to implement their language in whatever way they want...

– grawity
Apr 1 at 3:55





There's only "something wrong" if the shell claims POSIX compliance, and I think it's perfectly normal for shells that weren't invoked as /bin/sh and aren't specifically trying to emulate a POSIX shell to implement their language in whatever way they want...

– grawity
Apr 1 at 3:55


















draft saved

draft discarded




















































Thanks for contributing an answer to Super User!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1419624%2fis-there-an-equivalent-of-cd-for-cp-or-mv%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Plaza Victoria

In PowerPoint, is there a keyboard shortcut for bulleted / numbered list?

How to put 3 figures in Latex with 2 figures side by side and 1 below these side by side images but in...