2017-04-09 16 views
-1

ディレクトリ構造は次のとおりです。Bashのあるディレクトリから別のディレクトリへのディレクトリ構造のコピー

├── input 
│   ├── config.ac 
│   ├── dir1 
│   │   ├── image2.png 
│   │   └── image3.jpg 
│   ├── dir2 
│   └── image1.png 
├── main.sh 
└── output 

基本的に、私は、次の生成したい次./main.sh入出力を実行しようとしています:

├── input 
│   ├── config.ac 
│   ├── dir1 
│   │   ├── image2.png 
│   │   └── image3.jpg 
│   ├── dir2 
│   └── image1.png 
├── main.sh 
└── output 
    ├── dir1 
    │   └── image2.png 
    ├── dir2 
    └── image1.png 

など-exec見つけるなど、いくつかの事をしようとした後に、私が行ってきましたそれを一歩一歩進みます。私は出力の中に入力の内部ディレクトリ構造をコピーしようとしています。同時に、.pngファイルだけをコピーし、それ以外は何もコピーしません。ここで

for DIR in $1/; do 
     mkdir $2/$DIR 
     cp $1/$DIR*.png $1/$DIR $2/$DIR 
done 

は(ループがソースディレクトリ($ 1)内のすべてのディレクトリ構造を通過しますのために、それはその後、先のディレクトリに正確に同じディレクトリを作成します、私のロジックである:ここでは は、私が試してみましたものです$ 2)。今、現在のディレクトリにある.pngファイルを探し、それを宛先に作成されたものとまったく同じディレクトリにコピーします。 後でforループでファイルを変換する予定です。

これはまったく動作していないようです。私は、次のエラーを取得:

cp: cannot stat 'input/input/*.png': No such file or directory 
cp: cannot stat 'input/input/': No such file or directory 
+0

「forループでの処理を計画しています」というメモに気づいただけです。たとえば、 'find output -name '* .png'のようにします。パラレル "変換jpg {}> {。}。jpg" '。 – liborm

+0

私は、後で別のループでやってみようと思います。 – FShiwani

+0

'output/dir2'を空にしてもよろしいですか? –

答えて

2

変更

tar cf - .| (cd /other directory; tar xf -) 
+0

古い学校 - 私のように:-)私は 'cd/other && tar xf-'が好きです。 +1 –

+0

非常に良い!ありがとう。 bashにはたくさんのメソッドがあります。 – FShiwani

0

あなたはrsyncと、おそらく幸せになるでしょう:

rsync -a --include '*/' --include '*.png' --exclude '*' input/ output 

これは、すべてのディレクトリおよびPNGファイルをコピーする必要があります。コピーする内容を確認するには、-nvオプションを追加します。あなたの入力/出力を使用してディレクトリツリーをコピーするためのその後

から、あなたがコピーしているディレクトリへ

rsyncバージョンhere上の注意を参照してください。)

+0

しかし、出力ディレクトリには/ input/ – FShiwani

+0

というサブフォルダがあります。申し訳ありませんが、私の悪い - 入力には後続の '/'を使用する必要があります。 – liborm

+0

それは動作します!それは有り難いです。私はちょうど興味があります、上記の方法で同じことをすることは可能でしょうか?おそらく、-execを使ってfindを使用していますか? – FShiwani

0

私のお気に入り(構造):

cd input 
find . | cpio -pdm ../output 

必要に応じて「検索」オプションを調整します。

関連する問題