Linuxで特定のディレクトリ内のファイル名をもとに新しいファイルを作成する
MacOSで特定のディレクトリ内のファイル一覧を取得して、そのファイル名をもとにして新しいファイルを作成する必要があったのでその備忘録です。
例えばこんな感じでファイルがあったら、このディレクトリの中のファイルの拡張子を変えたものをコピーして作成します。
ディレクトリ
- hoge.txt
- fuga.txt
⬇⬇ 拡張子を書き換えたファイルを作成 ⬇⬇
別のディレクトリ
- hoge.md
- fuga.md
lsの出力結果をループ処理
ls
で出力したファイル名一覧はこんな感じでループ処理できます。
for filename in `ls ./dirname`; do
# 処理
done
置換して出力
ls
の結果を置換して出力するためにはls ./dirname | sed -e s/置換対象の文字列/置換後の文字列/g
という感じで書きます。
例として「.txt」から「.md」に書き換えるならls ./dirname | sed -e s/\.txt/\.md/g
みたいな感じです。ひとつずつ書き換えしたうえで出力するなら下記みたいになると思います。
# `hoge.txt`と`fuga.txt`があるディレクトリを指して実行すると
for filename in `ls ./dirname | sed -e s/\.txt/\.md/g`; do
echo $filename
done
# hoge.md
# fuga.md
新しいファイルを作成
これだとまだ置換されたファイル名が出力されただけなので新しいファイル名でファイルを作成してみます。空のファイルを作成するならtouch
コマンドですね。
# `hoge.txt`と`fuga.txt`があるディレクトリを指して実行すると
for filename in `ls ./dirname | sed -e s/\.txt/\.md/g`; do
touch "./new_dirname/$filename"
done
# new_dirnameディレクトリ内に hoge.md と fuga.md が作られる
Linuxでも同じコマンドが使えるはずです。うーん、もっと簡単に書けるような気がします