2016-11-02 6 views
3

/home/ziga/Mounted/に2つのサブディレクトリがあります。それらのそれぞれは、複数の非空のサブディレクトリを持っていますfindを使用してサブディレクトリの複製を作成する方法

/home/ziga/Mounted/dir1/subdir1-1 
/home/ziga/Mounted/dir1/subdir1-2 
... 

/home/ziga/Mounted/dir2/subdir2-1 
/home/ziga/Mounted/dir2/subdir2-2 
... 

がでディレクトリを作成するfindを使用するためにどのような方法があり、/home/ziga/CombinedMountsは深い/home/ziga/Mounted/内部の二つのレベルがあるものとまったく同じ名前を持つだろうと言うの?私が探しています。これは最終結果です:

/home/ziga/CombinedMounts/subdir1-1 
/home/ziga/CombinedMounts/subdir1-2 
/home/ziga/CombinedMounts/subdir2-1 
/home/ziga/CombinedMounts/subdir2-2 
... 

私は、このコマンドを使用してディレクトリのリストを取得することができます。

find /home/ziga/Mounted/ -maxdepth 2 -mindepth 2 -type d ! -name "lost+found" ! -name ".Trash*" -exec basename {} \; 

しかし、私は私の人生のために使用する方法を見つけ出すことはできませんその出力はmkdir -pになりますので、希望するサブディレクトリを取得できます。私は私の心を失ってい

どういうわけか、彼らは常に/home/ziga/CombinedMounts/home/ziga/Mounted/...

で終わる、助けてください。 :)

:一部のディレクトリ名にはスペースが含まれています。

+0

結果を配列の要素として設定できますか? 'DIRS =(\' <あなたのfind文> \ ')'のように。そして、 'DIRSのための' for dir 'を使って各ディレクトリを作ります。 – Gavin

+0

ディレクトリ名にスペースが含まれていればそれが使えますか? – zigamilek

+0

ああ、そうではないかもしれない。私はバッシュの専門家ではなく、ちょうどここで唾をかける。 – Gavin

答えて

2

これを試してみてください:

find /home/ziga/Mounted/ -maxdepth 2 -mindepth 2 \ 
    -type d ! -name "lost+found" ! -name ".Trash*" \ 
    -exec sh -c 'mkdir -p /home/ziga/CombinedMounts/"$(basename "$0")"' "{}" \; 

私はあなたが問題に言及していない部分だけを説明します。

mkdir -p "/path/$(basename "{}")"のような式に{}というプレースホルダーを確実に渡すことができないため、shが呼び出されました。式は、プレースホルダでも不明瞭です。

-cオプション(shのmanページを参照してください)コマンド文字列の後にオペランドの値からパラメータ0の値を設定します。

-c読むにはCOMMAND_STRINGオペランドからのコマンド。 オペランドの値と位置パラメータ($1,$2など)から残りの引数オペランドの値から特別なパラメータ0(2.5.2項、特殊パラメータ参照)の値を設定します。コマンドは標準入力から読み取られません。

+0

すごい!これだよ! :) – zigamilek

+0

詳細な回答と特に引用符と括弧のすべての種類の正しい位置をありがとう;)それらはいつも私を怒らせる。数時間頭を叩いた後、私は数分で解決策を提示します。再度、感謝します! – zigamilek

関連する問題