私の親フォルダにはサブフォルダが含まれています。各サブフォルダには次のフォルダがあります。
Parent_folder
folder1
folder_01_PAP_515151
folder_02_PAPA_554651
folder_03_PAPX_541313
folder_04_PAP_654123
folder2
folder_20_PAP_413513
folder_02_PAPD_521354
folder_055_PAP_685413
folder_100_PAP_132312
folder3
folder_11_PAPE_5313351
folder_32_PAP_3513131
folder_53_PAP_3213321
folder_84_PAP_3313213
..
次のコマンドを使用して、「を含むすべてのフォルダとサブフォルダを一覧表示します。肺高血圧「」と入力し、テキストファイル「list.txt」に保存します。
find -type d -name "*_PAP_" > list.txt
出力は次のとおりです。
./folder1/folder_01_PAP_515151
./folder1/folder_04_PAP_654123
./folder1/folder_20_PAP_413513
./folder2/folder_055_PAP_685413
./folder2/folder_100_PAP_132312
./folder3/folder_32_PAP_3513131
./folder3/folder_53_PAP_3213321
./folder3/folder_84_PAP_3313213
このリストから新しいフォルダを作成したいと思います。新しいフォルダーの名前には、「055_PAP」、「32_PAP」、「53_PAP」など、前のリストの「3桁_PAP」部分を含める必要があります。
01_PAP
04_PAP
20_PAP
055_PAP
100_PAP
32_PAP
53_PAP
84_PAP
答え1
ファイル(list
次の内容を含む名前)があり、ファイルの各行名に対してディレクトリを作成する必要がある場合は、ディレクトリ名は./folder?/folder_
。
./folder1/folder_01_PAP_515151
./folder1/folder_04_PAP_654123
./folder2/folder_055_PAP_685413
./folder2/folder_100_PAP_132312
./folder3/folder_32_PAP_3513131
./folder3/folder_53_PAP_3213321
./folder3/folder_84_PAP_3313213
それではできます。
cat list | sed -r -e 's~[.]/folder[0-9]+/folder_~~' | xargs -I{} mkdir -p «prefix»{}
- フォルダ番号を1つ以上の番号に設定しました。
- プレフィックスが必要ない場合は、「プレフィックス」を空白にしてください。
ソースの内容を保持しながら、ソースフォルダ/ディレクトリの名前を変更するには、次の手順を実行できます。
これでテストしてみてください。次に、名前の変更から削除し、-n
実際に実行します。
find . -type d -name "*_PAP_" | rename -n 's~[.]/folder[0-9]+/folder_~~'
rename
検索パターンはと同じですsed
。rename
ファイル名に適用され、sed
ファイルまたはストリームに適用されます。
オプションsed
:
-r
拡張正規表現(使用する正規表現の方言)を使用します。-e
次のパラメータは式(sedプログラム)です。's~[.]/folder[0-9]+/folder_~~'
シェルが解釈されないように引用された式です。
この表現は以下を説明します。s~[.]/folder[0-9]+/folder_~~
s
検索と置換~
区切り文字は式をさまざまな部分に分割するため、どの文字でも使用できますが、毎回同じ文字を使用する必要があります。s~«search_for»~«replace_with»~«options»
または別の文字を使用してくださいs@«search_for»@«replace_with»@«options»
。- «search_for»正規表現:
[.]
一点/folder
まさにそれが言うことです。[0-9]
数字。+
1つ以上の先行原子(数字)(したがって1つ以上の数字)。/folder_
まさにそれが言うことです。
- «replace_with»他のものに置き換えてください。この場合は何もありません。
- この場合は、「オプション」を参照してください。他のオプションには
i
大文字と小文字を無視することが含まれており、g
複数回実行してください(最初の文字列のみを検索するのではありません)。
sed
/言語はrename
複雑ですが、非常に強力です。あなたが使用する主なものはs
(ここで使用されているように)おそらくnextでありy
、それらは学ぶ価値があります。また、正規表現(grepや他のコマンドにも使用されます)を学ぶ必要があります。