我必须将文件从一个文件夹移动到另一个文件夹,但它们位于完全不同的路径中。目标路径太长且复杂,我记不住。有没有办法先转到目标目录,然后将路径存储在某个变量中,假设 X,然后转到源目录并编写如下命令:
mv * $X
答案1
尝试:
cd /your/long/path
X=$(pwd)
该命令pwd
打印当前目录;使用该命令,X=$(pwd)
您可以将命令的输出存储在变量 (1) 中X
(!周围没有空格=
)
cd /the/other/dir/
mv * "$X"
现在你是使用变量的值X
,使用$X
(将 $ 读作“的值”)。如果目录名称包含空格或其他特殊字符,则需要"
周围的。$X
如果你不确定 X 中有什么,你可以使用以下命令检查其内容
echo "$X"
(1)在bash
(和其他)shell中,它们被称为参数.例如参见这里有一个简单的教程, 或者这里。
答案2
假设你的 shell 是 bash,你可以使用
pushd /your/long/directory
popd
mv ./* "$OLDPWD"
当您更改目录时,bash 设置 $OLDPWD。
答案3
前段时间,我尝试创建一个更精致的版本X=$(pwd)
。mv * $X
结果就是我称之为“bashPortalGun”的东西。它就是:
https://github.com/tyukiand/bashPortalGun
这些脚本将你的 shell 提示符转换成如下形式:
me@host [orange -> there] here$
并允许您执行您期望从“传送枪”执行的所有操作,应用于 bash-shell 的上下文:
me@host ~$ cd /very/long/path
me@host /very/long/path$ pOrange # create orange portal
me@host [orange -> .portal.closed] /very/long/path$ cd /some/other/directory
me@host /some/other/directory$ pBlue # create blue portal
me@host [blue -> path] /some/other/directory$ mv file.txt [orange] # move stuff through portal
根据我的经验,它使使用mv
和cd
更舒适,特别是在使用多个 shell 时。也许你觉得它很有用,也许你只是认为在你的 bash 中拥有一把传送枪很酷 :)
欢迎积极参与的测试对象。我们将非常感激建设性的反馈。
答案4
创建临时符号链接而不是变量可能更容易。
使用“tab”自动完成/建议也并非那么“不方便”。但可能取决于个人的 .bashrc,我不确定。