これは私の元の投稿に関するフォローアップの質問です。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 folders
。
失敗した試みはリンクされた質問にあります。そこで、withコマンドがcp
visibleであることを確認しました。find
-maxdepth
ファイルを簡単にコピーできるfind
別のコマンドはありますか? ifコマンドを接続できないのと同じ機能はありますか?cp
-maxdepth
-maxdepth
cp
find
cp
[編集]:また、最初のレベルのディレクトリである1、2、3、4だけをコピーしたいと思います。ファイルをコピーしたくありません。混乱させて申し訳ありません。
答え1
ファイルやサブディレクトリをコピーせずにディレクトリのみをコピーしたい場合は、次のように簡単です。
terdon@oregano test folders $ tree
.
├── 1
│ ├── 1-1
│ ├── 1-2
│ ├── 1-3
│ ├── file-1
│ └── file-2
├── 2
│ ├── 2-1
│ ├── 2-2
│ ├── 2-3
│ ├── file-1
│ └── file-2
├── 3
│ ├── 3-1
│ ├── 3-2
│ ├── 3-3
│ ├── file-1
│ └── file-2
└── 4
├── 4-1
├── 4-2
├── 4-3
├── file-1
└── file-2
17 directories, 8 files
上記の例では、次のコマンドを使用して最上位ディレクトリを再作成できます。
terdon@oregano test folders $ find . -maxdepth 1 -type d -exec mkdir ../results/{} \;
mkdir: cannot create directory ‘../results/.’: File exists
$ tree ../results/
../results/
├── 1
├── 2
├── 3
└── 4
5 directories, 0 files
このエラーメッセージは無視してかまいません。これは.
、現在のディレクトリも探して、../results/.
すでに存在する現在のディレクトリを作成しようとするためです。
トップレベルのファイルもコピーするには、次の2つの手順で実行できます。
terdon@oregano test folders $ find . -maxdepth 1 -type d -exec mkdir ../results/{} \;
mkdir: cannot create directory ‘../results/.’: File exists
$ find . -maxdepth 2 -type f -exec cp {} ../results/{} \;
次を生成します。
$ tree ../results/
../results/
├── 1
│ ├── file-1
│ └── file-2
├── 2
│ ├── file-1
│ └── file-2
├── 3
│ ├── file-1
│ └── file-2
└── 4
├── file-1
└── file-2
次の方法で一度にこれを行うこともできます。
$ find . -maxdepth 1 -type d -exec sh -c 'mkdir ../results/$1 && cp {}/* ../results/$1' sh {} \;
mkdir: cannot create directory ‘../results/.’: File exists
cp: -r not specified; omitting directory './3/3-1'
cp: -r not specified; omitting directory './3/3-2'
cp: -r not specified; omitting directory './3/3-3'
cp: -r not specified; omitting directory './1/1-1'
cp: -r not specified; omitting directory './1/1-2'
cp: -r not specified; omitting directory './1/1-3'
cp: -r not specified; omitting directory './4/4-1'
cp: -r not specified; omitting directory './4/4-2'
cp: -r not specified; omitting directory './4/4-3'
cp: -r not specified; omitting directory './2/2-1'
cp: -r not specified; omitting directory './2/2-2'
cp: -r not specified; omitting directory './2/2-3'
cp
なしで使用するため、-r
ファイルのみがコピーされます。これらの警告が表示されますが、無視してもかまいません。次にリダイレクトしてミュートすることもできます/dev/null
。
find . -maxdepth 1 -type d -exec sh -c 'mkdir ../results/$1 && cp {}/* ../results/$1' sh {} \; 2>/dev/null