不久前,我从纯粹的 Windows 环境转向使用 Windows 和 Mac。
虽然我正在慢慢习惯我的 Mac 并爱上它,但有一些事情让我感到沮丧。
其中之一是文件系统上只有 1 个工作目录。
对于那些只运行 Unix 的人来说,这可能看起来很奇怪,但请遵循我在 Windows 上的经验。
我有 C:(程序)、D:(数据)、E:(CD/DVD)和 F: & G:(USB 密钥)。
如果我输入...
CD /D F:\Dir1\Dir2
CD /D D:\Dir3\Dir4
F:
CD
D:
CD
假设这些都是有效路径,输出将是......
F:\Dir1\Dir2
D:\Dir3\Dir4
这表明我可以在“驱动器”之间交换,并且获得每个驱动器的最后一个工作目录。
当您想要将内容从一个驱动器复制到另一个驱动器而无需键入整个路径时,这非常有用。
您可以转到该目录,验证其内容,切换到目标驱动器/目录,然后启动复制...
COPY F:*.* D:.
例如。
对于我的 Mac,虽然我可以使用带有 2 个 Finder 选项卡的 UI,但我仍然希望能够使用命令行。
是否有一种等效的方法可以让已安装的文件系统记住并公开该文件系统上的最后一个工作目录?
目前它是“完全输入整个命令”的方法。
答案1
您应该意识到 Windows 方式(实际上是 DOS 方式)是拥有一个硬映射A:
那些由字符( 、等)表示的低级“设备” C:
。
Unix(基本上)只有一棵目录树,并且您比在 DOS 上更统一地访问它。您可以通过多种方式访问文件系统。您可能从 DOS 世界中了解到的是图形化的、面向窗口的;例如,参见xfe
一位候选人。另一种更“本机”的访问是通过 shell。不同的外壳具有不同的功能。您可能想要(对于大量交互式使用)查看一下tcsh
,但在常用的 POSIX shell(bash
、、 )中ksh
,zsh
您确实有 a 的概念工作目录。您可以在目录之间导航cd
,特定变体是cd -
切换到上一个目录。从一个目录中,您可以使用预定义的 shell 变量$OLDPWD
或相应的命令访问前一个目录波形符表达式 ~-
(类似于上面提到的cd -
)。有了这些,你可以说,cp ./* ~-
。ksh
还有一个更强大的功能cd
,可以轻松地在不同版本树的各自相同子目录之间跳转;例如,cd gawk-3.1.6 gawk-4.1.2
从这些变体的任何子目录中跳转到相应的另一个子目录。在某些 shell 中,还有两个命令pushd
和popd
可用命令(本地或通过库)来记住您想要重新访问的目录。然后是 的概念CDPATH
,允许您跳转到常用目录而无需完全指定完整路径。 - 我写了所有关于更改目录的内容,因为它是充分利用$OLDPWD
或 的基础。~-
我之前在 shell 命令中提到过。如果没有提到命令和路径完成功能,描述就不完整;通常使用该Tab
键您可以完成命令,因此即使您显式“写入”路径,shell 也会帮助您非常快速地完成此操作。最后但并非最不重要的一点是 shell 的历史;您可以访问以前输入的命令,可以根据需要编辑和/或重新调用它们。
答案2
您的问题是关于 bash 的功能,它可能是您用作命令行的 shell。
对于切换部分,您可以使用cd -
切换回上一个目录。
如果你想在命令中引用以前的目录,你可以$OLDPWD
这样使用:
cp $OLDPWD/* .
也看看help pushd
,help popd
一般man bash
。
答案3
我将添加另一个选项/技巧。
它使用符号链接,这些非常有用。它们有点像快捷方式,但在大多数方面都更好(除非快捷方式用作包装器脚本,在这种情况下包装器脚本更好)。
它还使用 bash 的CDPATH
变量。
cd ~
mkdir drive-letters
cd drive-letters
ln -s / c:
ln -s "$HOME" h:
ln -s /media/cdrom/ e:
CDPATH=".:~/drive-letters" # you will have to put this one in your ~/.bashrc to make it persistent
现在你可以这样做:
cd c:
cd e:
答案4
如果您指的是物理分区,则这些分区安装在/Volumes/PartitionName
Mac 上。
您的 F:\Dir1\Dir2 将是/Volumes/PartitionName/Dir1/Dir2/
'NIX 不记得每个卷上的“当前目录”,但您可以将它们保存在环境变量中,例如
CD_1=`pwd`
将保存当前目录,您可以使用 $CD_1 访问该目录
另一种选择是创建symlinks
感兴趣的目录。