ZSH で大量のファイルの名前を変更する
最近、
いつものように、CLI の使用について話していると仮定すると、
したがって、次のファイル構造を想定しています.
これを次のようにシームレスに変換したいと思います (
これが私の最後のワンライナーです(ZSH準拠):
いくつかの調査が必要な興味深い部分 (私の場合) は、:t :r :h 修飾子です.
変数にパスがある場合、修飾子を使用してその一部を抽出できます.
これにより、ファイル名 (
任務完了 + もう 1 つのトリックを学びました :)
幸せなコーディングとシェルスクリプト:)
<function name>/<function name>.js
個のファイルを <function name>/index.js
個持つ代わりに、Netlify 関数のファイル名をきれいにすることにしました.いつものように、CLI の使用について話していると仮定すると、
mv x/x x/index.js
を n 回すばやく実行してこのタスクを完了するか、シェル スクリプト、awk、sed、または選択したその他の関連ツールをいじるのにもう少し時間を費やすことができます. CLI スキルを強化します.選択は明らかでした:)したがって、次のファイル構造を想定しています.
- my-func/
- my-func.js
- my-func2/
- my-func2.js
- foobar.js
これを次のようにシームレスに変換したいと思います (
foobar.js
は変更しないでください).- my-func/
- index.js
- my-func2/
- index.js
- foobar.js
これが私の最後のワンライナーです(ZSH準拠):
for i in ./*/*.js; do if [[ $i:t:r == $(echo $i:h | cut -c3-) ]]; then mv -- "$i" "$i:h/index.js"; fi; done
いくつかの調査が必要な興味深い部分 (私の場合) は、:t :r :h 修飾子です.
変数にパスがある場合、修飾子を使用してその一部を抽出できます.
$myFilePath:t -> prints only the filename with extension
$myFilePath:t:r -> prints only the filename without extension
$myFilePath:h -> prints path to the file
これにより、ファイル名 (
for in ./*/*.js
) を親ディレクトリ名 ( $i:t:r
) と比較し、ファイルを "$i:h/index.js"に移動することで、$i:h
を使用してファイルを簡単に反復処理し、必要なファイルのみを除外できます. .任務完了 + もう 1 つのトリックを学びました :)
幸せなコーディングとシェルスクリプト:)
Reference
この問題について(ZSH で大量のファイルの名前を変更する), 我々は、より多くの情報をここで見つけました https://dev.to/sergeylukin/renaming-bulks-of-files-in-zsh-46ocテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol