ラベル Command の投稿を表示しています。 すべての投稿を表示
ラベル Command の投稿を表示しています。 すべての投稿を表示

2014年2月19日水曜日

改行文字の確認とか変換とか

テキストファイルの改行文字を調べたいことがたまにあり、 その都度ググってたのですがググる毎にいろいろなやり方が出てきます。

「前回ググった時のやり方が良いんだけど、どんなだっけ?」ということがよく有るので、 いつでも参照できるようにまとめときます。

改行文字が LF か CR-LF か確認

例えばこんなテキストファイルがあるとします
$ cat Test.txt
aaa
bbb
ccc

cat コマンドでは改行がどうなってるのか確認できません。

改行文字を確認
$ od -c Test.txt
0000000   a   a   a  \r  \n   b   b   b  \r  \n   c   c   c  \r  \n
0000017

改行文字は CR-LF (\r\n) でした。

改行文字を変換

パッケージをインストール

sudo apt-get install tofrodos
CR-LF を LF に変換
$ fromdos Test.txt

CR-LF な Test.txt が上書きされ、LF (\n) になりました。

LF を CR-LF に変換
$ todos Test.txt

LF な Test.txt が上書きされ、CR-LF (\r\n) になりました。

CentOS など別の環境では dos2unix, unix2dos というものが使えるようですが、詳細は確認していません。


2013年1月30日水曜日

シンボリックリンク自体の chown

$ ls -l
total 0
-rw-rw-r-- 1 user user 0 2013-01-30 12:20 File
lrwxrwxrwx 1 user user 4 2013-01-30 12:20 SymLink -> File
という状態の時に Symlink に対して chown すると
$ sudo chown root:root SymLink
$ ls -l
total 0
-rw-rw-r-- 1 root root 0 2013-01-30 12:20 File
lrwxrwxrwx 1 user user 4 2013-01-30 12:20 SymLink -> File
シンボリックリンクの参照先の File が chown されます。
man chown で見ると
$ man chown
... snip ...
       -h, --no-dereference
              affect  each  symbolic link instead of any referenced file (useful only on systems that can change the ownership
              of a symlink)
... snip ...
とあるので --no-dereference を付けるとシンボリックリンク自体が chown されるようです。
$ ls -l
total 0
-rw-rw-r-- 1 user user 0 2013-01-30 12:20 File
lrwxrwxrwx 1 user user 4 2013-01-30 12:20 SymLink -> File

$ sudo chown --no-dereference root:root SymLink

$ ls -l
total 0
-rw-rw-r-- 1 user user 0 2013-01-30 12:20 File
lrwxrwxrwx 1 root root 4 2013-01-30 12:20 SymLink -> File
シンボリックリンク自体が chown されました。

Python だと
os.chown(path, uid, gid, *, dir_fd=None, follow_symlinks=True)
で follow_symlinks を False にすれば良さそうなのですが
Python 3.2 以前では follow_symlinks 使えないようです。
subprocess で chown コマンドを呼ぶしかないか。。。