たとえば、ファイルの日付順にファイル名を変更したいとします。
file_1.pdf
file_2.pdf
到着する:
file_1_ONE.pdf
file_2._TWO.pdf
スクリプトは、最初のファイルの名前をファイルの日付でソートされた「ONE」に変更する必要があります。
答え1
一部のBSDシステム(Ubuntuシステム、パッケージで利用可能など)でのzsh
シェルとnumber
ユーティリティの使用:/usr/games
bsdgames
number=1
for file in ./file_*.pdf(.Om); do
mv "$file" "${file%.pdf}_$(number -l "$number" | tr '[:lower:]' '[:upper:]').pdf"
number=$(( number + 1 ))
done
(.Om)
以前のパターンのシェル固有のzsh
修飾子です。パターンは通常のファイルのファイル名のリストに展開され、mtimeタイムスタンプ(最後の変更時刻)に従ってソートされ、最も古いファイルからソートされます。
このコマンドは現在の値で呼び出されnumber -l "$number" | tr '[:lower:]' '[:upper:]'
、などの対応する英語の単語を大文字で返します。これにより、ファイル名のサフィックスなしでアンダースコアがファイル名の前に追加され、文字列が最後に追加されます。number
$number
ONE
TWO
THREE
.pdf
または以下を避けてくださいtr
。
number=1
for file in ./file_*.pdf(.Om); do
en_number=$(number -l "$number")
mv "$file" "${file%.pdf}_${en_number:u}.pdf"
number=$(( number + 1 ))
done
${en_number:u}
$en_number
(の出力)を大文字に変換しますnumber
。修飾子は特定であり、:u
に対応します。zsh
${variable:u}
${variable^^}
bash
テスト:
$ for name in file_{1..10}.pdf; do touch "$name"; sleep 2; done
$ ls -lt
total 4
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_10.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_9.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_8.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_7.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_6.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_5.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_4.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_3.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_2.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_1.pdf
-rw-r--r-- 1 kk wheel 163 Jan 31 13:26 script.sh
$ zsh script.sh
$ ls -lt
total 4
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_10_TEN.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_9_NINE.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_8_EIGHT.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_7_SEVEN.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_6_SIX.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_5_FIVE.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_4_FOUR.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_3_THREE.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_2_TWO.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_1_ONE.pdf
-rw-r--r-- 1 kk wheel 163 Jan 31 13:26 script.sh
答え2
このスクリプトは、増加するカウンターと共に、作成時の順序で現在のフォルダー内の各ファイルの名前をリストします。echo
必要なアクションを実行するように行を変更してください:)
#!/bin/bash
((counter=1))
for f in $(ls -1ct); do
echo $f-$counter
((counter+=1))
done