在 Bash 中隐藏变量中的长路径

在 Bash 中隐藏变量中的长路径

我必须将文件从一个文件夹移动到另一个文件夹,但它们位于完全不同的路径中。目标路径太长且复杂,我记不住。有没有办法先转到目标目录,然后将路径存储在某个变量中,假设 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

根据我的经验,它使使用mvcd更舒适,特别是在使用多个 shell 时。也许你觉得它很有用,也许你只是认为在你的 bash 中拥有一把传送枪很酷 :)

欢迎积极参与的测试对象。我们将非常感激建设性的反馈。

答案4

创建临时符号链接而不是变量可能更容易。

使用“tab”自动完成/建议也并非那么“不方便”。但可能取决于个人的 .bashrc,我不确定。

相关内容