bashスクリプトループで1ではなく0001という名前のディレクトリを作成する


10

次のbashスクリプトでj = 0000の場合、0001、0002、...という名前のディレクトリを作成するように次のbashスクリプトを変更するにはどうすればよいですか?実際には、1、2、3という名前のディレクトリを作成します

for i in *.jpg; do let j+=1 ; mkdir $j ; done

ありがとう!

回答:


13

現在のスクリプトは10進値のみを使用しています。これは明らかに先行ゼロなしの値に変換されます。

文字列は、先頭にゼロを付けて4文字の長さに埋め込む必要があります。これを行うには、バックティック``を使用して、printf呼び出しの結果を取得しますprintf %04d $j

その結果、完全なコマンドが必要です。

for i in *.jpg; do let j+=1; mkdir `printf %04d $j`; done

ソース: StackOverflow:bash-文字列のゼロをパディング

(より詳細なソリューションが必要な場合は、明らかにその質問へのさらなる回答も参照してください。ただし、これは間違いなくこのユースケースで完全に機能します。)


5

bashを使用する場合の最良のオプションは次のとおりです。

mkdir {0001..0666}

名前のDIRSを作成する0001には0666(ゼロパディング付き)。

あなたが指定されたディレクトリをしたい場合はprefix0001suffixprefix0002suffix、...その後:

mkdir prefix{0001..0666}suffix

しましょう。

奇数のディレクトリ名だけが必要な場合

mkdir {0001..0666..2}

など... リファレンスマニュアルのBrace Expansionbash参照してください。

FEichingerが指摘するように、ディレクトリの数を事前に知っておく必要があります。あなたに近いが本当に安全でよりモダンなbashイディオムを使用するソリューションが必要な場合:

for i in *.jpg; do ((++j)); mkdir $(printf "%04d" $j) ; done

これは、以前に既知の量のディレクトリを作成する場合にのみ役立ちます。通常、番号付きディレクトリを使用する場合、動的コンテキスト内にいます。つまり、実行時に量を決定する必要があるため、文字列のパディングが必要です。ただし、特定のユースケースによって異なります。
user98085

@FEichingerそうです!それに応じて編集された投稿。
gniourf_gniourf
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.