cpはMacで異なる動作をします。

cpはMacで異なる動作をします。

フォルダ全体をコピーするには、次のコードがあります。

#!/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"

フォルダをコピーし、ファイルパスが長すぎて処理できなくなるまで、フォルダに同じ内容を含む別のコピーを追加してから、同じ内容を再度追加します。フォルダ構造は次のとおりです。

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で何が違うのか知っていますか?

答え1

私の考えではテレコムの答えスニッフィングの主な理由:他のシンボリックリンクだけであり、シンボリックリンクを含めることができます。

私の実験によると、要件を満たす一連の状況があります。

  • Test_folderはい、シンボリックリンクpdf2txt、そして
  • cpOPはBSD遺産を持つネイティブのmacOSを使用しています。

これらのシンボリックリンクはmacOScpのループ検出を中断します。 (GNUはcpすでにインストールされています。自分で作ったあるいは、再帰的にコピーしても、デフォルトではシンボリックリンクに従わない他のパッケージマネージャです。 )

以下は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

答え2

/Volumes/Mac_Storage/pdf2txt/pdf2txtそれを指すシンボリックリンクはありますか.

実行してls -l /Volumes/Mac_Storage/pdf2txt確認してください。

次の行が表示される場合:

lrwxrwxrwx 1 madmiddle madmiddle 1 Feb 12 12:34 pdf2txt -> .

...だからそうです。

これらのリンクを作成する順序は、ln -s . pdf2txtミスによって偶然に発生する可能性があります。

答え3

私は本当に退屈で、私のMBP runnin mojaveのcpのマニュアルページで以下を見つけました。

互換性cpユーティリティの過去のバージョンには-rオプションがありました。この実装はこのオプションをサポートしていますが、特別なファイル、シンボリックリンク、またはFIFOを正しくコピーしないため、使用しないことをお勧めします。

はい、macOSではcp -rが正しく機能しません。

関連情報