0

別のシステムにアップロードするファイルシステム データをプッシュするスクリプトがあります。

各ファイルが実際にどのような「種類」のファイルであるかを自分で知ることができれば、非常に便利です。後でクエリを実行するのに役立つからです。

たとえば、私のスクリプトが次のように出力しているとします。

/home/myuser/mydata/myfile/data.log
/home/myuser/mydata/myfile/myfile.gz
/home/myuser/mydata/myfile/mod.conf
/home/myuser/mydata/myfile/security
/home/myuser/mydata/myfile/last

最後に、私は見たいです:

/home/myuser/mydata/myfile/data.log log
/home/myuser/mydata/myfile/myfile.gz gz
/home/myuser/mydata/myfile/mod.conf conf
/home/myuser/mydata/myfile/security security
/home/myuser/mydata/myfile/last last

正規表現と sed を使用してこれを行う方法が必要ですが、わかりません。

助言がありますか?

編集:

コマンドラインからこの情報を取得する必要があります。これまでの回答を見ると、明らかにこれを明確にしていません。したがって、私が提供したサンプルデータでは、データがすべて grep と seds を介して供給されていると仮定します (データは既に滅菌されています)。目的の結果を得るには、サンプル データを sed/grep/awk/whatever にパイプできる必要があります。

4

5 に答える 5

2

英字以外の文字で区切られた最後のファイルを表示します。

awk -F '[^[:alpha:]]' '{ print $0,$NF }'
/home/myuser/mydata/myfile/data.log log
/home/myuser/mydata/myfile/myfile.gz gz
/home/myuser/mydata/myfile/mod.conf conf
/home/myuser/mydata/myfile/security security
/home/myuser/mydata/myfile/last last
于 2013-10-01T15:55:50.410 に答える
1

他の人がすでに答えているように、ファイル名を解析するには:

extension="${full_file_name##*.}"   # BASH and Kornshell/POSIX only
filename=$(basename "$full_file_name")
dirname=$(dirname "$full_file_name")

ファイル名にスペース、タブ、またはその他の奇妙な文字が含まれている可能性がある場合は、引用符が必要です。

ファイルがディレクトリかファイルかリンクかをtestコマンドでテストすることもできます (これはリンクされて[いるのでtest -f foo[ -f foo ].

ただし、「各ファイルが実際にどのような種類のファイルであるかを自分で判断できれば、非常に便利です」とおっしゃいました。

その場合は、fileコマンドを調査することをお勧めします。このコマンドは、ある種のマジック ファイル(従来は/etc/magic) によって決定されたファイル タイプを返しますが、新しい実装ではユーザー独自のスキームを使用できます。これにより、拡張子とファイルのヘッダーのマジック ナンバー、またはファイルの最初の数行を調べることでファイルの種類を知ることができます (^#! .*/bash$最初の行で正規表現を探します。

于 2013-10-01T15:39:32.153 に答える