2017-03-10 17 views
-2

私は複数のディレクトリを持っていて、それらをcpにして名前を変更したいと思っています。複数のディレクトリをコピーして名前を変更します

#For example. 
> 1st_folder 
>> Case_A 
    >>> Folder_A_Date_Case 
    >>> Folder_B_Date_Case_work 
    >>> Folder_C_Date_Case_work_Result 
>> Case_B 
    >>> Folder_A_Date_Case 
    >>> Folder_B_Date_Case_work 
    >>> Folder_C_Date_Case_work_Result 

> 2nd_folder 
>> Case_A 
    >>> Folder_A_Date_Case 
    >>> Folder_B_Date_Case_work 
    >>> Folder_C_Date_Case_work_Result 
>> Case_B 
    >>> Folder_A_Date_Case 
    >>> Folder_B_Date_Case_work 
    >>> Folder_C_Date_Case_work_Result 

私はFolder_AFolder_BFolder_Cをコピーし、Folder_DFolder_Eと、以下のようにFolder_Fように名前を変更したいです。

> 1st_folder 
>> Case_A 
    >>> Folder_A_Date_Case 
    >>> Folder_B_Date_Case_work 
    >>> Folder_C_Date_Case_work_Result 
    >>> Folder_D_Date_Case  # copy from Folder_A 
    >>> Folder_E_Date_Case_work # copy from Folder_B 
    >>> Folder_F_Date_Case_work_Result # copy from Folder_C 
>> Case_B 
    >>> Folder_A_Date_Case 
    >>> Folder_B_Date_Case_work 
    >>> Folder_C_Date_Case_work_Result 
    >>> Folder_D_Date_Case   # copy from Folder_A 
    >>> Folder_E_Date_Case_work  # copy from Folder_B 
    >>> Folder_F_Date_Case_work_Result # copy from Folder_C 
.... 
.. 
.do the same thing as 2nd_folder 

私はシェルスクリプトを使用して非常に迅速にそれをどのように行うことができますか?

+0

シェルスクリプトのスケルトンがありますか? – myaut

+1

何を試しましたか?どのように失敗しましたか? – tripleee

答えて

1

フォルダをループし、パラメータ拡張を使用して新しいフォルダ名を作成し、cp -rを使用してすべての内容のフォルダをコピーします。ケースの中身は、より動的な場合

#!/bin/bash 

for dir in *_folder ; do 
    for case in "$dir"/Case_*/ ; do 
     for folder in "$case"/Folder*/ ; do 
      newname=${folder/Folder_A/Folder_D} 
      newname=${newname/Folder_B/Folder_E} 
      newname=${newname/Folder_C/Folder_F} 
      cp -r "$folder" "${newname}" 
     done 
    done 
done 

、すなわち3つの以上のサブフォルダがあるかもしれない、または名前が同じパターンに従わない、あなたはより具体的にする必要があります。また、そのような場合には、もっと表現力豊かな言語(Perlなど)を手に入れたいと思うかもしれません。

+0

答えてくれてありがとうございますが、 'newname = $ {folder/Folder_A/Folder_D}'、 'newname/Folder_A/Folder_D'や' folder/Folder_A/Folder_D'です。ごめんなさい。 @choroba – Sakura

+1

@Sakura:$ folderから始めて、$ newnameを作成します。最初のステップは$ folderを変更し、次のステップは$ newnameを変更します。置換の1つのみがトリガーされる必要があります。 – choroba

関連する問題