Armadilloフォーラム

ファイル名の付け方について

n.yamamoto

2015年7月10日 21時06分

Yamamotoです。

度々、お世話になります。

運用しているシステムで、計測データをファイルにして通知用デヴァイスに転送(mv)しているのですが
転送先のファイル名を"()”付にしたところ転送されないと報告が来ました。
12345_ABCD.dat->12345_(ABCD).datにすると転送できないらしい。私自身は未確認です。

Linuxでは"/"とNULL以外は使用出来るはずなのですが、使用できない文字とか有るのでしょうか?

一応文字数とかも255バイトを超えていないかも確認して大丈夫なようでした。

コメント

at_ohsawa

2015年7月10日 21時27分

> Linuxでは"/"とNULL以外は使用出来るはずなのですが、使用できない文字とか有るのでしょうか?

ファイルシステムで使う事はできますが、shellの予約語なので、
""(ダブルクォート) で括らないと、shellがサブシェルで実行するコマンドだと解釈します。
例:

[root@armadillo-iotg (ttymxc1) ~]# touch test
[root@armadillo-iotg (ttymxc1) ~]# mv test t(es)t    <-----NG
-ash: syntax error: unexpected "("
[root@armadillo-iotg (ttymxc1) ~]# mv test "t(es)t"  <-----OK

もしくは\(バックスラッシュ)でエスケープしても良いです。

[root@armadillo-iotg (ttymxc1) ~]# mv test t\(es\)t

参考までに、
前述のサブシェル内のコマンド実行としての()の使い方の例は

[root@armadillo-iotg (ttymxc1) ~]# cd /tmp; pwd   <----- 普通に/tmpにcdしているのでカレントディレクトリが /tmpに移動している
/tmp
[root@armadillo-iotg (ttymxc1) /tmp]# 
 
 
[root@armadillo-iotg (ttymxc1) ~]# (cd /tmp); pwd <----- サブシェルでcdしているので、括弧を出るとカレントディレクトリが変っていない
/root
[root@armadillo-iotg (ttymxc1) ~]#

他にも下記の文字がshellの機能を利用するための予約語になっています。
shellに入力する際は\でエスケープするかダブルクォートでかこってください。

           Control operators:
                 & && ( ) ; ;; | || <newline>
 
           Redirection operators:
                 < > >| << >> <& >& <<- <>