複数のディレクトリがあり、各ディレクトリには画像を含む「サンプル」ディレクトリが含まれています。私が望むのは、各ファイルのファイル名の末尾に(拡張子の前に)テキストサフィックスを追加してから、ディレクトリの内容をその親ディレクトリにコピーすることです。
デフォルトでは、/maindir/dir1/example/、/maindir/dir2/exampleなどのファイル名を変更し、その親ディレクトリ(dir1やdir2など)にコピー/移動したいと思います。すべての「examples」ディレクトリの内容は.jpg拡張子を持つイメージです。この問題を正しい方法で進めているかどうかはわかりませんが、次のようにしてコピー部分を実行する方法を理解できました。
find /path/to/folder/ -type d -name example -execdir bash -c 'cp "$1"/* .' cp {} \;
コンテンツを親フォルダに正しくコピーしますが、findを使用すると、コピーされたファイルにサフィックスを追加する方法が少し混乱します。
答え1
find
1つの方法はループを使用し、for
各f
ファイルパスに使用することです。パラメータ拡張ターゲット名()を生成できるように、拡張子(t=${f##*.}
)、基本名(b=${f##*/}
)、および拡張子のない基本名()を抽出します。${b%.*}
n=${b%.*}-thumb.${t}
find /path/to/folder/ -type d -name example -execdir sh -c 'for f in "${1}"/*;
do t=${f##*.}; b=${f##*/}; n=${b%.*}-thumb.${t}; cp -- "$f" "$n"; done' cp {} \;
実行する内容を印刷するには、常にecho
前に1つを挿入できます。cp
別の方法zsh
:
autoload zmv
zmv -n '(**/)example/(*)(.*)' '${1}${2}-thumb${3}'
-n
(テスト実行)-C
コピーファイルに置き換えます。