授業の資料を複製
Keynoteを章立て分コピーしてフォルダ内に分けるというのを手作業でやるには現実的ではなかったので、ターミナルを使ってやる事に。
やりたかったのは、
- 文字列操作
- 繰り返し複製&フォルダ分け
- 指定フォルダに移動
といったところだったが、何せなんちゃってCUI慣れ
している状態だったので、そこそこの期間を要したのはここだけの話(白目)
最終的なコマンドは以下の内容になったので、備忘録的に記しておく。
for var in `ls *.key`
do
mkdir ${var%.*}
for i in {1..5}
do
cp $var ${var%.*}_0$i.key
done
rm $var
for i in {1..5}
do
mv ${var%.*}_0$i.key ${var%.*}/${var%.*}_0$i.key
done
done
文字列操作
ターミナルで文字列操作をするという事が今までなく、その機会があっても手作業で逃げられるところは逃げてしまっていた次第で。改めて文字列操作と、その確認方法を復習。
デバック
echo
編集した文字列を確認したい場合を先に記しておくと、echo
というコマンドを覚えておく。
これは、結果をそのままターミナルに表記するので、文字列操作の確認時はまず必要な機能にはなってくる。
…ここに辿り着くにもそこそこ時間がかかったのもここだけの話(白目)
script
結果をテキストに保存するという事も可能。
$ script sample.txt
で、テキストファイルに書き出し、exit
で書き出し終了という流れで使える。自分の場合は、基本cd
でディレクトリ指定して作業するので、書き出されるテキストファイルはそのディレクトリに保存されてる。
自分の使い方としては、ffmpegの書き出し結果が毎度見切れる&見づらいので、テキストに出力するようにしている。
参考記事
https://qiita.com/mihooo24/items/d67c2b14729dfaefa1a8
拡張子を消す
ディレクトリを作るために、ファイル名を抽出する。
ここはKeynoteの〜.key
を消したいところなので、.
で分割しようと思う。
${var%.*}
参考記事
https://qiita.com/aosho235/items/c36568830a8d47288284
繰り返しの複製&フォルダ分け
繰り返しの作業はfor文を使用したのだが、連番をファイル名に入れるのに頭に番号がついてしまうとカリキュラムごとにまとめるのが面倒に。
なので、ファイル名の後に連番を付与するとする。
ファイル名と拡張子の間に連番を付与して複製
ファイルの複製はcp
コマンドを使用。
cd <複製する元ファイル> <複製後のファイル名>
という書き方になる。
ここで、ファイル名と拡張子の間に連番を入れるという部分をまとめる。
for i in {1..5}
do
cp $var ${var%.*}_0$i.key
done
元々for文で繰り返し作業をするのだが、i
の部分に繰り返し番号の整数が入るようになっているので、これを使用する前提とする。1番目のループということで、1を使いたかったら$i
と書けば、1番目のループで1という整数が使える。
文字列の連結に関しては、$~
で変数を使用する事ができるが、文字の結合に関しては、C#などの記法+
などは不要となり、そのままつなげてしまって良いようだ。
これはフォルダ名を付けるための文字列操作と同じコマンドなのだが、ファイル名の定義なので、連番の後に分割してしまった拡張子を付け直す必要がある。それが〜.key
の部分になる。
指定フォルダに移動
ファイルの移動に関しては、冒頭のファイル名を使用したmkdir
で作成されたディレクトリに、連番付与されたファイルをmv
コマンドを使って移動させる。
mv <元のファイル名> <移動先ディレクトリ名&ファイル名>
ここで注意しないといけないのが、連番を付与したファイル名を再定義する事と、ファイル名をディレクトリとしたので、もう一度ディレクトリ名を定義しないといけないという点&ファイル名も再定義する必要があるという事。
基本前に使ったコマンドをコピペする形で再定義は可能。
for i in {1..5}
do
mv ${var%.*}_0$i.key ${var%.*}/${var%.*}_0$i.key
done
以上がターミナルでファイルをコピーするコマンド一覧になります。
もうちょっとでターミナルに慣れてきた感あるぜ…