我偶然发现了一段代码,并怀疑我是否理解正在做什么:
cp $i ../../$x/$y
这是否会将 i 的值从目录 /$x/$y 复制到每个 i 的两个目录中?(这是一个 for 循环。)
mv dir ../../$x$y/name
我认为这会将目录 dir 从 $x$y/name 向上移动两个目录。这样对吗?在处理长目录时,我一直怀疑自己是否理解了 bash 的语法。
答案1
这会将文件从i
变量中的路径复制到提到的目录。
../../
意思是“上升两级”。
$x/$y
表示向下移动到目录,该目录的名称存储在x
变量中,然后从变量向下移动到目录y
。
但如果$y
目录不存在,该文件将被复制到目录$y
中的文件中$x
。
mv dir ../../$x$y/name
移至dir
位于name
上两层和下两层$x$y
-> name
。
答案2
在开始解释之前,假设x
是1
和y
是2
,并且我们在文件夹中使用了命令/home/<user>/dir1/dir11/
。
第一个命令是常用cp
命令。你可以从 复制文件名/home/<user>/dir1/dir11/
,然后将其移动:
- 通过 2 个文件夹向上移动 2 个调用
../
,所以你在/home/<user>/
- 然后向下找到 2 个文件夹,分别命名为里面所说的
x
和y
(所以你把它复制到里面/home/<user>/$x/$y/
,所以它/home/<user>/1/2/
在我们的例子中)
注意:如果/home/<user>/1/2/
不存在,您复制的文件将采用 中定义的名称y
,因此您的文件将被命名为2
;但如果/home/<user>/1/
不存在,cp
命令将失败,您将收到错误
第二条命令是常用mv
命令。你可以将dir
文件夹从/home/<user>/dir1/dir11/
:
- 就像
cp
命令中说的那样,有 2 个文件夹,所以你/home/<user>/
因为 2 次../
使用而处于 - 然后向下移动 2 个文件夹,第一个在
$x$y/
(12/
在我们的示例中),然后name/
。因此,您的文件夹dir
放置如下:/home/<user>/12/name/dir