find&cp コマンドは、最初のレベルのディレクトリをコピーしません。

find&cp コマンドは、最初のレベルのディレクトリをコピーしません。

次のディレクトリ構造があります。

test folders
├── 1
│   ├── 1-1
│   ├── 1-2
│   └── 1-3
├── 2
│   ├── 2-1
│   ├── 2-2
│   └── 2-3
├── 3
│   ├── 3-1
│   ├── 3-2
│   └── 3-3
└── 4
    ├── 4-1
    ├── 4-2
    └── 4-3

16 directories, 0 files

find&cpコマンドを使用して、すべてのサブフォルダを除いて最初のレベルのフォルダである1,2,3,4のみをコピーしようとしています。

├── 1
├── 2
├── 3
└── 4

作業ディレクトリは「/home/username/Downloads/testフォルダ」です。

使った

username@username-desktop:~/Downloads/test folders$ find . -maxdepth 1 -type d

出力は次のとおりです

.
./2
./3
./4
./1

コマンドの最初の部分をcp:と組み合わせると、find . -maxdepth 1 -type d -exec cp -p -v "{}" "/home/username/Downloads/results" \;結果は次のようになります。

username@username-desktop:~/Downloads/test folders$ find . -maxdepth 1 -type d -exec cp -p -v "{}" "/home/username/Downloads/results" \;
cp: -r not specified; omitting directory '.'
cp: -r not specified; omitting directory './2'
cp: -r not specified; omitting directory './3'
cp: -r not specified; omitting directory './4'
cp: -r not specified; omitting directory './1'

次に、上記のコマンドに-rスイッチを追加しました。

username@username-desktop:~/Downloads/test folders$ find . -maxdepth 1 -type d -exec cp -p -r -v "{}" "/home/username/Downloads/results" \;
'./1' -> '/home/username/Downloads/results/./1'
'./1/1-1' -> '/home/username/Downloads/results/./1/1-1'
'./1/1-2' -> '/home/username/Downloads/results/./1/1-2'
'./1/1-3' -> '/home/username/Downloads/results/./1/1-3'
'./2' -> '/home/username/Downloads/results/./2'
'./2/2-1' -> '/home/username/Downloads/results/./2/2-1'
'./2/2-2' -> '/home/username/Downloads/results/./2/2-2'
'./2/2-3' -> '/home/username/Downloads/results/./2/2-3'
'./3' -> '/home/username/Downloads/results/./3'
'./3/3-1' -> '/home/username/Downloads/results/./3/3-1'
'./3/3-2' -> '/home/username/Downloads/results/./3/3-2'
'./3/3-3' -> '/home/username/Downloads/results/./3/3-3'
'./4' -> '/home/username/Downloads/results/./4'
'./4/4-1' -> '/home/username/Downloads/results/./4/4-1'
'./4/4-2' -> '/home/username/Downloads/results/./4/4-2'
'./4/4-3' -> '/home/username/Downloads/results/./4/4-3'

結果フォルダには次のものが含まれます。

results
├── 1
│   ├── 1-1
│   ├── 1-2
│   └── 1-3
├── 2
│   ├── 2-1
│   ├── 2-2
│   └── 2-3
├── 3
│   ├── 3-1
│   ├── 3-2
│   └── 3-3
└── 4
    ├── 4-1
    ├── 4-2
    └── 4-3

すべてのサブフォルダをどのようにコピーしますか? -r を含めましたが、find コマンドの先頭から -maxlength 1 も含めました。なぜこれが起こるのか、どうすれば理解できますか?

[編集]ここにリンクされている次の質問:cpを使用してさまざまなレベルのサブディレクトリを除外する方法は?

ベストアンサー1

-maxdepth 1指示ですfind。そのため、あなたの意志はfindそれに向かって走りますが、それに向かって走りません。まず実行されることに注意してください。cp …./1cp …./1/1-1cp ….

find走るときはcp -p -r -v . /home/username/Downloads/resultscpにしないでください-maxdepth 1独自の引数だけを見ることができます。そして、この正確なコマンド./1/1-1-r

これを見てください:-execオプションについて学ぶfind。スタンドアロンコマンドの作成と実行には魔法はありませんfind -exec

おすすめ記事