[Mac] テキストファイルのファイル名を1行目に書き込む
テキストファイルのファイル名をそのテキストファイル自身の1行目に書き込む作業をする必要が出てきたのでやってみた。
環境:macOS Catalina 10.15.2
(1)GNU sed をインストールする。
$ brew install gnu-sed
(2)cd で対象ディレクトリへ移動。
(3)単一のファイル(今回は「あいう.txt」とする)に対して、ファイル名を1行目に書き込むには以下。
$ gsed -i -e "1i `basename あいう.txt .txt`" あいう.txt
ただし、フォイル名に半角スペースを含む場合(「あいう かきく.txt」)は、半角スペースの前に \ が必要となる。
$ gsed -i -e "1i `basename あいう\ かきく.txt .txt`" あいう\ かきく.txt
もし対象ディレクトリ内すべてのテキストファイルに対して実行するなら以下のようにする。
(1')GNU sed をインストールする。
$ brew install gnu-sed
(2')cd で対象ディレクトリへ移動。
(3')以下のコマンドでファイルリスト(list)を作る。
$ ls -1 *.txt > list
(4')以下のようなシェルスクリプトを作り、hoge.sh というファイル名で保存する。
#!/bin/bash
while read line
do
echo $line
gsed -i -e "1i $line" $line
done < list
(5')4’ を実行する。
$ sh hoge.sh
ただこれもファイル名に半角スペースがあると以下のようなエラーが表示される。
gsed: can't read 〇〇〇〇: No such file or directory
まあ、最初に半角スペースを適当な記号(★など)に置換してから実行すればいいんだけど、ワンライナーでディレクトリ内のテキストファイルに対して一気に実行できるコマンドがないかなあ。。。
参考:
apt - How do I insert a line at the top of a text file using the command line? - Ask Ubuntu
https://askubuntu.com/questions/151674/how-do-i-insert-a-line-at-the-top-of-a-text-file-using-the-command-line
入力と出力 | UNIX & Linux コマンド・シェルスクリプト リファレンス
https://shellscript.sunone.me/input_output.html
How to get only filename using sed - Unix & Linux Stack Exchange
https://unix.stackexchange.com/questions/44735/how-to-get-only-filename-using-sed
ある文字列をファイルの特定行に挿入するコマンド - 元RX-7乗りの適当な日々
https://www.na3.jp/entry/20110310/p1
Sedで1行追加 - JanGaJan.com
https://jangajan.com/blog/2014/09/09/sed-insert-text/
MacとLinuxでは、sedの動作が異なるので注意 | ITを使っていこう
https://it-ojisan.tokyo/mac-linux-sed/
シェルの入出力制御あれこれ - Qiita
https://qiita.com/tag1216/items/7ce35b7c27d371165e56
標準出力をシェル変数に入れたい - Qiita
https://qiita.com/netudra/items/f11b4922289c071290be
echoコマンドの詳細まとめました【Linuxコマンド集】
https://eng-entrance.com/linux-command-echo
find/xargsを使ったファイル・ディレクトリ名の一括置換/一括作成コマンド一覧
https://uguisu.skr.jp/Windows/find_xargs2.html
Add a variable defined after the first line of a text file - codesd.com
https://www.codesd.com/item/add-a-variable-defined-after-the-first-line-of-a-text-file.html
bash - osx find exec rm find: exec: unknown primary or operator - Stack Overflow
https://stackoverflow.com/questions/27915657/osx-find-exec-rm-find-exec-unknown-primary-or-operator
ファイル名などを抽出するbasenameコマンドの使い方まとめ【Linuxコマンド集】
https://eng-entrance.com/linux-command-basename
この記事が気に入ったらサポートをしてみませんか?