フォルダー全体をコピーする次のコードがあります。
#!/bin/bash
B="H:\pdf2txt"
DST_DIR="H:\Test_Folder"
cp -r "$B" "$DST_DIR"
これはWindowsマシンでは期待どおりに機能しますが、Macでこれに変更すると、次のようになります。
#!/bin/bash
B="/Volumes/Mac_Storage/pdf2txt"
DST_DIR="/Volumes/Mac_Storage/Test_folder"
cp -r "$B" "$DST_DIR"
フォルダーをコピーしますが、その中に同じコンテンツを持つ別のコピーを追加し、ファイルパスが長すぎて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
などなど。
WindowsとMacで動作が異なる理由は何ですか?
私は思う telcoMの答え 主な原因の周りを嗅ぐ:シンボリックリンクが含まれている可能性が高く、それは別のものです。
私の実験に基づいて、法案に合う一連の状況があります:
Test_folder
はpdf2txt
へのシンボリックリンクであり、cp
を使用していますこの種のシンボリックリンクは、macOS cp
のサイクル検出を無効にします。 (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
/Volumes/Mac_Storage/pdf2txt/pdf2txt
を指すシンボリックリンク.
はありますか?
確認するには、ls -l /Volumes/Mac_Storage/pdf2txt
を実行します。
次のような行が表示された場合:
lrwxrwxrwx 1 madmiddle madmiddle 1 Feb 12 12:34 pdf2txt -> .
...それが原因です。
このようなリンクを作成するコマンドはln -s . pdf2txt
です。これは、タイプミスの結果として偶発的に発生する可能性がかなり高い場合があります。
私は本当に退屈で、mbp runnin mojaveのcp manページでこれを見つけました:
互換性cpユーティリティの旧バージョンには-rオプションがありました。この実装はそのオプションをサポートしています。ただし、特殊ファイル、シンボリックリンク、またはfifoを正しくコピーしないため、その使用は強くお勧めしません。
ええ、cp -rはmacOSでは正しく機能しません