我有以下代码来复制整个文件夹:
#!/bin/bash
B="H:\pdf2txt"
DST_DIR="H:\Test_Folder"
cp -r "$B" "$DST_DIR"
Run Code Online (Sandbox Code Playgroud)
这在 Windows 机器上按预期工作,但是当我将它更改为我的 Mac 时:
#!/bin/bash
B="/Volumes/Mac_Storage/pdf2txt"
DST_DIR="/Volumes/Mac_Storage/Test_folder"
cp -r "$B" "$DST_DIR"
Run Code Online (Sandbox Code Playgroud)
它复制文件夹,然后在该文件夹中添加另一个副本,内容相同,然后再次相同,直到文件路径太长,mac无法处理。文件夹结构如下:
Test_Folder
| ??? pdf2txt
| ??? test1.txt
| ??? test2.txt
| ??? pdf2txt
| ??? test1.txt
| ??? test2.txt
| ??? pdf2txt
| ??? test1.txt
| ??? test2.txt
| ??? pdf2txt
| ??? test1.txt
| ??? test2.txt
| ??? pdf2txt
| ??? test1.txt
| ??? test2.txt
| ??? pdf2txt
| ??? test1.txt
| ??? test2.txt
| ??? pdf2txt
Run Code Online (Sandbox Code Playgroud)
等等等等。
知道为什么它从 Windows 到 Mac 的工作方式不同吗?
我认为telcoM 的回答嗅到了主要原因:它可能涉及一个符号链接,只是一个不同的符号链接。
根据我的实验,有一组情况符合要求:
Test_folder是到 的符号链接pdf2txt,并且cp,它具有 BSD 传统这种符号链接会破坏 macOScp的循环检测。(GNU cp,正如Homebrew或其他一些包管理器所安装的那样,默认情况下不遵循符号链接,即使在递归复制时也是如此。)
这是一个在 macOS High Sierra 上测试的演示:
$ ln -s pdf2txt Test_folder
$ ls -lAF Test_folder
lrwxr-xr-x 1 aho staff 7 Feb 13 20:13 Test_folder -> pdf2txt/
$ /bin/cp -r pdf2txt Test_folder
cp: Test_folder/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt: name too long (not copied)
cp: Test_folder/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt: name too long (not copied)
# Let's just look at the first 30 lines of a recursive ls
# (And yes, we're looking at pdf2txt)
$ ls -lRAF pdf2txt | head -n 30
pdf2txt:
total 0
drwxr-xr-x+ 5 aho staff 170 Feb 13 20:13 pdf2txt/
-rw-r--r--+ 1 aho staff 0 Feb 13 19:43 test1.txt
-rw-r--r--+ 1 aho staff 0 Feb 13 19:43 test2.txt
pdf2txt/pdf2txt:
total 0
drwxr-xr-x+ 3 aho staff 102 Feb 13 20:13 pdf2txt/
-rw-r--r--+ 1 aho staff 0 Feb 13 20:13 test1.txt
-rw-r--r--+ 1 aho staff 0 Feb 13 20:13 test2.txt
pdf2txt/pdf2txt/pdf2txt:
total 0
drwxr-xr-x+ 3 aho staff 102 Feb 13 20:13 pdf2txt/
pdf2txt/pdf2txt/pdf2txt/pdf2txt:
total 0
drwxr-xr-x+ 3 aho staff 102 Feb 13 20:13 pdf2txt/
pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt:
total 0
drwxr-xr-x+ 3 aho staff 102 Feb 13 20:13 pdf2txt/
pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt:
total 0
drwxr-xr-x+ 3 aho staff 102 Feb 13 20:13 pdf2txt/
pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt/pdf2txt:
total 0
Run Code Online (Sandbox Code Playgroud)
是否有/Volumes/Mac_Storage/pdf2txt/pdf2txt指向的符号链接.?
跑去ls -l /Volumes/Mac_Storage/pdf2txt检查。
如果你看到这样的一行:
lrwxrwxrwx 1 madmiddle madmiddle 1 Feb 12 12:34 pdf2txt -> .
Run Code Online (Sandbox Code Playgroud)
……这就是原因。
创建这样一个链接的命令是ln -s . pdf2txt,这可能很容易由于打字错误而意外发生。
| 归档时间: |
|
| 查看次数: |
2178 次 |
| 最近记录: |