ファイルパーミッションを、chmodで使える形式で保存する
2497 ワード
ファイルを一旦消した後で復元したい
何らかの都合でファイルを一旦消した後でパーミッションを復元したい場合、あるいはファイルのパーミッションを他の新規ファイルにもコピーしたい場合はないだろうか。
パーミッション情報を確認したければlsコマンド(-l
オプション)を使い、設定したければchmodコマンドを使う。ところがls -lの出力文字列はchmodに使えない。人が手作業でやるならよいが、これじゃ自動化できないので、ls -lのパーミッション情報をchmodに流し込める形式に変換するシェルスクリプトを書いてみた。
できあがった変換シェルスクリプト
ちゃんと、setuid、setgid、stickyビットにも対応させた。
パーミッションを保存・復元するシェルスクリプト
# パーミッション情報をchmodで使える8進数で保存
mode=$(ls -l "$file" | # ファイル情報取得
awk '{print substr($1,2,9);}' | # パーミッション文字列抽出
sed 's/..\(.\)..\(.\)..\(.\)/\1\2\3 &/' | # 3者の実行ビット文字を手前にコピー
awk '{gsub(/[x-]/,"0",$1);gsub(/[^0]/,"1",$1);print $1 $2;}' | # 実行ビットが"-","x"以外ならビット立て
tr 'STrwxst-' '00111110' | # 残りは小文字ならビット立て
xargs printf 'ibase=2;%s\n' | # 得られた文字列を2進数と見なし……
bc | # ……一旦10進数に変換
xargs printf '%04o' ) # 8進数化(4桁にゼロパディングしつつ)
# $fileに対して、あんなことこんなこと……
# 復元
chmod $mode "$file"
パズルとして見れば面白いけど、もっと簡単にできてほしいところ。
ちなみにstatコマンドを使うというのはナシ。表示形式が環境によってまちまちなのでスクレイピング面倒だし……。これだからPOSIXの範囲にないコマンドは、ブツクサブツクサ……。
Author And Source
この問題について(ファイルパーミッションを、chmodで使える形式で保存する), 我々は、より多くの情報をここで見つけました https://qiita.com/richmikan@github/items/dbbce61de1d1622627d3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .