0

シンプルなデザインにしたいけどやり方がわからない

folderA と folder B の 2 つのフォルダーがあります。folderA の内部には、「file_」と「file_anything」という名前の 2 つのファイルがあります。2番目のファイルの「何か」の部分は、私が知らないテキストです(または、さまざまなフォルダーで異なる場合があります)。私がする必要があるのは、具体的に知る必要なく、folderB の名前を「何か」のテキストに変更することです

手順を超えて、誰かがあなたが理解し、他の状況に解決策を変更または適応できるようにするために使用するトピックへのリンクを教えてくれれば、私は感謝します. 学びたい

ありがとう

編集: このソリューションを bash スクリプト (perl 関数なし) に含める必要があります。このスクリプトは、同じ構造を持つ多数のフォルダーに対して繰り返されます。例えば:

FolderA(ファイル「file_」と「file_manana」を含む)とFolderB---に変更---> FolderAとmanana(旧FolderB)

FolderC (ファイル "file_" と "file_monkey") と FolderD --- に変更 ---> FolderA と monkey (以前の FolderD)

FolderE (ファイル "file_" と "file_moose") と FolderF--- に変更 ---> FolderA と moose (以前の FolderF)

より多くのフォルダで何度も何度も

編集2:

わかりました、私は近づいています。問題は次のとおりです。私は fn を次のように定義します。これは echo $fn で確認できます。今、私はこれを行います: fn=${fn##*_}. ただし、fn は「anything」ではなく「a*」に変換されます。何を修正すればよいですか?@デビッド・ザスラフスキー

編集 3: Thx @chepner . BASH_REMATCH がその方法でした。あなたの書き方がうまくいかなかったので、少し変更して使用します

for f in FolderA/file_*; do # I assume a single match
[[ $f =~ "file_"(.*) ]]
suffix=${BASH_REMATCH[1]}
mv FolderB "$suffix"
done

引用符に注意してください。それらの間にスペースを含めることもできます

みんなありがとう

4

2 に答える 2

0

最終結果がどうあるべきかはよくわかりませんがfile_anything、次のようにしての末尾部分を抽出できます。

$ f="file_manana"
$ [[ $f =~ file_(.*) ]]
$ suffix=${BASH_REMATCH[1]}
$ echo $suffix
manana

だからあなたがやりたいと思うのは

for f in FolderA/file_*; do # I assume a single match
    [[ $f =~ file_(.*) ]]
    suffix=${BASH_REMATCH[1]}
    mv FolderB "$suffix"
done
于 2013-03-06T13:22:07.887 に答える