正規表現を使用して、zshスクリプトを介してファイル名を再構成します。

正規表現を使用して、zshスクリプトを介してファイル名を再構成します。

패턴이 포함된 파일을 다운로드 받습니다.

Konto_12334567890-Auszug_YYYY_00MM.pdf

경로에 저장하고 싶습니다.

.../Belege YYYY/Belege YYYY MM/Kontoauszug.pdf

문제는 원래 파일 이름에서 YYYY 연도와 MM 월을 추출하여 새 파일 이름 경로의 폴더 이름에 넣는 방법입니다.

이라는 변수에 파일 이름(경로 제외)이 있습니다 $filename. $dest경로와 $filename_new새 파일 이름 에 대한 또 다른 변수가 있습니다 (이 경우에는 Constant Kontoauszug).

내 첫 번째 생각은 이전과 포함된 모든 것을 제거 Auszug_하고 처음 네 자리를 하나의 변수( $year)에 넣고 마지막 두 자리를 .pdf다른 변수( $month)에 넣는 것이었습니다. 어쩌면 더 나은 해결책이 있을 수도 있습니다.

그래서 다음과 같은 경로를 만들 수 있습니다.

DEST="/Users/Belege/Belege $year/Belege $year $month/"

私はただ得て満たして$yearください$month

どうすればいいですか?

ベストアンサー1

zmv最も簡単な方法は、ヘルパー機能を介して移動することです。

dtmv () {                                                                     
    mkdir -p -- $2:h && mv -- $@
}
autoload zmv
zmv -n -P dtmv 'Konto_12334567890-Auszug_(*)_00(*).pdf' '/Users/Belege_$1/Belege_$1_$2/Kontoauszug.pdf'

sは、などの(*)2番目の引数に使用できる逆参照を作成します。ここでは代わりに関数を実行します。この関数はディレクトリを作成し、新しく作成されたディレクトリにファイルを移動します。各ファイルに対して、元のファイルと代替ファイルが渡されます。$1$2
zmv-Pdtmvmv

ノートこれは次のことを-n意味します。試運転したがって、上記は実行するコマンドのみを印刷します。-n実際にコマンドを実行するには削除してください。また、空白のあるファイル名を使用しないことをお勧めします。ただし、すべての下線を空白に変更するように固執する場合:

zmv -n -P dtmv 'Konto_12334567890-Auszug_(*)_00(*).pdf' '/Users/Belege $1/Belege $1 $2/Kontoauszug.pdf'

何らかの理由で変数を使用する必要がある場合は、さまざまな方法で使用できます。ファイル名は固定長であり、同じパターンと一致するため、個人的に部分文字列を使用します。

year=${filename: -13:-9}
month=${filename: -6:-4}

:最初のコロンとマイナス記号の間のスペースに注意してください。-
別の方法は、文字列を分割して_(拡張子を削除した後:r)、年が3番目の要素になり、月が最初の2文字を引いた4番目の要素になるようにすることです。

year=${${(s[_])filename:r}[3]}
month=${${${(s[_])name:r}[4]}:2}

おすすめ記事