ファイルを再帰的にコピーして名前を変更する

ファイルを再帰的にコピーして名前を変更する

私の入力フォルダにサブフォルダなどがfiles_input含まれていて、これらのすべてのサブフォルダに別のサブフォルダがある場合。各サブフォルダーに。01-201502-201503-2015index.html

これらすべてのファイルを同じフォルダ内の別々のファイルのように見えるようにというindex.htmlフォルダにコピーするにはどうすればよいですか?files_outputもちろん、名前を変更する必要があります。そのために --backup を使ってみました。

頑張りました

find files_input -name \*.html -exec cp --backup=t '{}' files_output \;

番号を付けてファイルを1つだけコピーし、他のファイルをコピーしないでください。

これがどのように変わるのかわかりませんが、zshを使用しており、バージョンは次のようになります。

   $ zsh --version | head -1
   zsh 5.0.2 (x86_64-pc-linux-gnu)
   $ bash --version | head -1
   GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
   $ cp --version | head -1
   cp (GNU coreutils) 8.21
   $ find --version | head -1
   find (GNU findutils) 4.4.2

アイデアはありますか?

編集する:

たとえば、次のようにします。

cp --backup=t files_input/01-2015/index.html files_output

5回連続してfiles_outputフォルダにindex.htmlが表示されます! CPが故障しましたか? 5つの異なるファイルがないのはなぜですか?

ベストアンサー1

zshユーザーがユーザーの場合:

$ tree files_input
files_input
|-- 01_2015
|   |-- subfolder-1
|   |   `-- index.html
|   |-- subfolder-2
|   |   `-- index.html
|   |-- subfolder-3
|   |   `-- index.html
|   |-- subfolder-4
|   |   `-- index.html
|   `-- subfolder-5
|       `-- index.html
|-- 02_2015
|   |-- subfolder-1
|   |   `-- index.html
|   |-- subfolder-2
|   |   `-- index.html
|   |-- subfolder-3
|   |   `-- index.html
|   |-- subfolder-4
|   |   `-- index.html
|   `-- subfolder-5
|       `-- index.html
(etc.)
$ mkdir -p files_output
$ autoload -U zmv
$ zmv -C './files_input/(*)/(*)/index.html' './files_output/$1-$2-index.html'
$ tree files_output
files_output
|-- 01_2015-subfolder-1-index.html
|-- 01_2015-subfolder-2-index.html
|-- 01_2015-subfolder-3-index.html
|-- 01_2015-subfolder-4-index.html
|-- 01_2015-subfolder-5-index.html
|-- 02_2015-subfolder-1-index.html
|-- 02_2015-subfolder-2-index.html
(etc.)

ここで何が起こるのかは、コマンドをzmv使用できるようにすることですautoload -U zmv。このコマンドは、一致するファイルの名前を変更、コピー、またはリンクするために使用されます。zsh 拡張ワイルドカードパターン

私たちはオプションを使ってzmv教えてくれ-Cます。コピーファイルを移動する代わりに(デフォルト)。次に、コピーするファイルと一致するパターンを指定します./files_input/(*)/(*)/index.html。どちらも(*)ステップ2サブディレクトリ名と一致し、各ファイルの新しい名前に使用できるように括弧内に入れます。各ファイルの新しい名前は2番目の引数です。./files_output/$1-$2-index.htmlここ$1$2、およびはパターンの角かっこでキャプチャされた文字列です(たとえば、サブディレクトリ名の逆参照)。どちらのパラメータも一重引用符で囲む必要があります。

おすすめ記事