패턴이 포함된 파일을 다운로드 받습니다.
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
-P
dtmv
mv
ノートこれは次のことを-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}