文章目录
  1. 1. 相关概念
    1. 1.1. Symbolic links
    2. 1.2. Hard link
  2. 2. 常用参数
  3. 3. 具体场景

相关概念

Symbolic links

Symbolic links/soft links可以理解成为一个快捷方式,跟mac GUI右击出来的alias有着很类似的功能,但是比alias要更加的底层一些。Softlink 即可以针对文件也可以针对文件夹进行创建。

通过ln -s target/file/or/dir link/path来创建。我创建了针对文件和文件夹的softlink和alias,通过命令可以观察它们之间的区别。

1
2
3
4
5
6
7
8
9
10
$ ls -lo@
total 3024
-rwxr-xr-x 1 zhengyi 2723 May 24 08:20 build.sh
-rw-r--r--@ 1 zhengyi 257136 May 25 20:49 build.sh.alias
com.apple.FinderInfo 32
lrwxr-xr-x 1 zhengyi 8 May 25 20:49 build.sh.link -> build.sh
drwxr-xr-x 9 zhengyi 306 May 25 20:24 src
-rw-r--r--@ 1 zhengyi 1268908 May 25 20:40 src_alias
com.apple.FinderInfo 32
lrwxr-xr-x 1 zhengyi 4 May 25 20:39 src_link -> src/

我们可以看到softlink是通过文件信息来识别的,而alias是通过拓展属性来进行实现的,也就是说alias只有在apple 的Finder下有用,在其他地方他就是一个普通的文件。

如果我们链接到一个目录的话,alias因为是一个文件自然不能够cd进去,而softlink是可以cd进去的。

Hard link

与softlink相对应,与softlink不同,hardlink不是一个“快捷方式”,而是一个真实存在的文件。文件可以理解成磁盘上一块内存,而我们在终端和GUI看到的“文件”只是指向了那块内存,所以我们可以有多个”文件”指向同一块内存。这就是hardlink干的事情。hardlink是不允许针对一个目录创建的,因为这样会破坏文件系统的结构。

常用参数

-f - 将覆盖目标文件,并不做提示。
-n - 不覆盖目标文件。
-r - 这个是历史版本的递归拷贝,不推荐使用。
-R - 如果源文件是一个目录的话,递归拷贝到目标路径。如果源文件以/结尾,那么源文件夹里的内容将被拷贝到目标路径,如果不指定则是拷贝整个文件夹。
-H - 与-R配合使用,保持原有的softlink。
-P - 与-R配合使用,不保持原有的softlink,这个是递归拷贝的时候默认的选项。
-v - 与-R配合使用,打印出所有被拷贝的文件。
-p - 将保护原始文件的修改时间、访问时间、flie flag,文件模式等信息。

具体场景

拷贝单个文件

1
cp file1.txt ../file2.txt

拷贝多个文件

1
cp file1.txt file2.cpp file3.cs test/src

拷贝符合某个文件名规则的文件

cp支持简单的通配符。

1
cp *.zip package

拷贝整个目录,包括子目录,并维持文件的修改时间不变

1
cp -RpH dir1 dir2/src
文章目录
  1. 1. 相关概念
    1. 1.1. Symbolic links
    2. 1.2. Hard link
  2. 2. 常用参数
  3. 3. 具体场景