このディレクトリ構造を考慮すると
$ lsd --tree
.
└── / defs
├── / bar
│ └── / v1
│ └── bar.txt
└── / foo
└── / v1
└── foo.txt
この構造を生成するには、単純なコマンド/スクリプトが必要です。実際の構造にはより多くのディレクトリがあります。
$ lsd --tree
.
└── / defs
├── / bar
│ ├── / v1
│ │ └── bar.txt
│ └── / v2
│ └── bar.txt
└── / foo
├── / v1
│ └── foo.txt
└── / v2
└── foo.txt
ターゲットをコピーして名前を変更します。
答え1
これが解決策かもしれません。
#!/bin/bash
# This is file 'script'.
set -e # (optional)
# immediately exit on some errors, like
# mkdir <existing directory>
ROOT=. # or some other directory
# find <directories where to start> <predicates>
# -type d ... directories
# -name 'v1' .... exactly matching v1
# -name '*v1' .... end with v1
find "$ROOT" -type d -name 'v1' | while read x;
do
b="${x%v1}" # remove v1 at the and
y="${b}v2" # add v2
mkdir "$y"
cp -vr "$x"/. "$y"/
done
スクリプトをテストするためにいくつかのファイルとディレクトリを作成しましょう。 (最初に完全に削除してくださいx
。)
$ rm -fr x; \
mkdir x x/a x/a/v1 x/a/v1/d x/b x/b/v1; touch x/notcopied x/a/notcopied x/a/v1/f1 x/b/v1/f2 x/a/v1/d/f3; find x; echo -------------;\
(cd x; bash ../script);\
find x;
x
x/a
x/a/notcopied
x/a/v1
x/a/v1/d
x/a/v1/d/f3
x/a/v1/f1
x/notcopied
x/b
x/b/v1
x/b/v1/f2
-------------
'./a/v1/./d' -> './a/v2/./d'
'./a/v1/./d/f3' -> './a/v2/./d/f3'
'./a/v1/./f1' -> './a/v2/./f1'
'./b/v1/./f2' -> './b/v2/./f2'
x
x/a
x/a/v2
x/a/v2/d
x/a/v2/d/f3
x/a/v2/f1
x/a/notcopied
x/a/v1
x/a/v1/d
x/a/v1/d/f3
x/a/v1/f1
x/notcopied
x/b
x/b/v2
x/b/v2/f2
x/b/v1
x/b/v1/f2
/.
オンラインにアクセスすることはcp
非常に重要です。それがなければ、v2/v1
内部にファイルがあります。