cp はパターンを親ディレクトリと一致させます。

cp はパターンを親ディレクトリと一致させます。

パターンに一致する親ディレクトリにディレクトリをコピーする

cp 
dir/group1/sub01/./././DCM
dir/group2/sub01/././DCM
to 
dir/Base/group1/sub01/Time1/
dir/Base/group2/sub01/Time1/
with matched group name and sub name
output: 
dir/Base/group1/sub01/Time1/DCM
dir/Base/group2/sub01/Time1/DCM

おそらく考えています。

find * -type d -name "DCM" -execdir bash -c 'old="$1"; new="$(cd ../../..; basename --"$PWD")/$(cd ../..; basename --"$PWD")"; cp -r "$old" "dir/Base/$new"' - {} \;

どんな提案がありますか?

ベストアンサー1

長く複雑な行を作成するのではなく、次のことをお勧めしますawk

new_dir=$(echo "$dir" | awk -F\/ '{print "dir/Base/"$2"/"$3"/Time1/"}')

スクリプトは次のとおりです。

while read dir
do
  new_dir=$(echo "$dir" | awk -F\/ '{print "dir/Base/"$2"/"$3"/Time1/"}')
  cp -fdR "$dir" "$new_dir"
done <(find . -type d -name DCM)

おすすめ記事