同じ名前のファイルがたくさんあり、次のようなディレクトリ構造(簡略化)があります。
../foo1/bar1/dir/file_1.ps
../foo1/bar2/dir/file_1.ps
../foo2/bar1/dir/file_1.ps
.... and many more
それぞれのディレクトリに移動してこれらのpsファイルをすべて表示するのは非常に非効率的であるため、すべてを別のディレクトリにコピーしたいのですが、最初の2つのディレクトリの名前(私の目的に関連するもの)を含めますファイル名に。
私は以前にこのように試しましたが、すべて連続して名前が付けられているため、どのファイルがどこからのものかを取得できません。
#!/bin/bash -xv
cp -v --backup=numbered {} */*/dir/file* ../plots/;
../plots
それらをコピーするフォルダはどこにありますか。ただし、これらはfile.ps.〜x〜(xは数値)の形式になっているため、「。ps。〜*〜」を削除し、ps拡張子のみを次のように残します。
rename 's/\.ps.~*~//g' *;
rename 's/\~/.ps/g' *;
次に、psファイルには数百のポイントがあり、開くのに時間がかかることがあるので、それらをjpgに変換します。
for file in * ; do convert -density 150 -quality 70 "$file" "${file/.ps/}".jpg; done;
ディレクトリを手動で変更する必要があるため、これは実際には機能するbashスクリプトではありません。
それを行う最良の方法は、コピーされたファイル名に組み込まれている最初の2つのディレクトリの名前で始まるファイルをコピーすることだと思います。
どうすればこの最後のことを行うことができますか?