プレフィックス "ms_PF" を使用してルート ディレクトリの下のディレクトリの名前を変更し、プライマリ ディレクトリの変更された名前を使用してサブディレクトリの名前を変更し、追加 "_" を追加して、すべてのディレクトリとサブディレクトリをルート ディレクトリにコピーする必要があります。しました。次のようになります。
root
maindir1
maindir2
subdir1
subdir2
subdir3
maindir1 と maindir2 は接頭辞 "ms_PF_" に名前が変更され、ルートに直接コピーされます。 maindir2にはサブディレクトリがあるため、maindir2の新しい名前、つまりms_PF_maindir2にアンダースコア(_)を追加し、すべてのサブディレクトリを次のようにルートにコピーします。
ms_PF_maindir1
ms_PF_maindir2_subdir1
ms_PF_maindir2_subdir2
ms_PF_maindir2_subdir3
この問題についてご協力いただきありがとうございます。私が試した解決策はこれでしたが、実際には修正が必要です。
root_dir="/dwn/icbu_dwn/LL"
prefix="ms_PF_"
do_it () {
awk '{ print "mv $root_dir $prefix ${root_dir/\//_}" }' | sh
}
find "$root_dir" -depth -type d | do_it
答え1
ディレクトリが数個しかない場合は、手動で実行します(他の操作を実行するよりも、作成/デバッグ操作が必要です)。
コレクションが大きい場合は、find(1)
お気に入りのエディタを使用して影響を受けるファイルのリストを作成し、移動を実行するスクリプトに変換してください。エラーを確認して実行してください。
sed(1)
大きいか重複している場合は、デフォルトで上記と同じことを行いますが、すぐに「新しい名前へのパスを編集」を使用します。おそらく電話で直接受け取ることができますfind
。初心者に怖がる素晴らしいジョークになります...
答え2
これにより、正しい順序で名前が変更されます。最初のパターンの末尾のスラッシュは一致をディレクトリに制限します。
cd root
for dir in maindir*/*/ maindir*; do
echo mv $dir ms_PF_${dir/\//_}
done
出力
mv maindir2/subdir1/ ms_PF_maindir2_subdir1/
mv maindir2/subdir2/ ms_PF_maindir2_subdir2/
mv maindir2/subdir3/ ms_PF_maindir2_subdir3/
mv maindir1 ms_PF_maindir1
mv maindir2 ms_PF_maindir2