次のディレクトリ構造があります。
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 …
./1
cp …
./1/1-1
cp …
.
find
走るときはcp -p -r -v . /home/username/Downloads/results
気cp
にしないでください-maxdepth 1
。独自の引数だけを見ることができます。そして、この正確なコマンド./1/1-1
は-r
。
これを見てください:-exec
オプションについて学ぶfind
。スタンドアロンコマンドの作成と実行には魔法はありませんfind -exec
。