ls -1R の結果をフルパスで欲しいのですが、どのようにしたら良いでしょうか?

A 回答 (2件)

ls -1Rの表示形式でないといけないのでしょうか?


もしそうならば、何かスクリプトを作成しないと駄目だと思いますが。

もしあるディレクトリ配下についてフルパスで一覧が欲しいだけなのであれば、例えばfindコマンドの-printで表示させたのはどうでしょうか?

例) /usr/local配下の場合のコマンドイメージ
# find /usr/local -print

もし、レギュラーファイルのみ欲しいなら
# find /usr/local -type f -print
    • good
    • 0
この回答へのお礼

なるほど!
フルパスのリストってどっかで見たと思ったのですがfindでしたね。。。

lsで出せるもんだと思い込んでいました。助かりました。

お礼日時:2005/04/06 02:11

実は与えられたパスをフルパスに展開するというのが問題でして, 特に途中にディレクトリに対するシンボリックリンクが入るとどうしていいかよくわからなかったりします.



例えば /foo -> /usr/local というシンボリックリンクがあったときに, /foo を cwd にして .. をフルパスに展開したとします. このとき / と /usr のどちらにするのが適切かというのは非常に微妙だったりします. 少なくとも, getcwd(3) では / にするのは無理っぽい感じ.
    • good
    • 0
この回答へのお礼

丁度findで思い通りの結果が得られました。どうもありがとうございました。

お礼日時:2005/04/06 02:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qlsでのファイル名・パスのフルパス取得

環境:Solaris10

lsコマンドでディレクトリ、ファイル名の一覧を取得しようとしています。

条件としては
1.対象は全てのディレクトリ・ファイル(ls -R)
2.実行結果はアクセス権・所有者の情報も含む(ls -lの結果のような)
3.ディレクトリ・ファイル名ともにフルパスで表示

この上記3点を満たそうとして、
ls -dlR /
と実行してみましたが、この場合Rスイッチが有効になりませんでした。

OS標準コマンドでこの3点を満たすことは出来るのでしょうか?

Aベストアンサー

find / -exec ls -ld {} \;
でできるかと思います。

Qsedの置換文字に変数を使用したいのですが・・・

あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。

例:
X="a"
Y="b"
echo test.txt | sed 's/${X}/${Y/g}' >test.txt

sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

Aベストアンサー

' ・・・' で囲まれた中の$はそのままドルマークです。変数展開をするなら、'・・・'で囲んではいけません。

何も囲まないか、"・・・"で囲むかです。

QUNIXで、ディレクトリを比較して、ファイル・ディレクトリの存在を比較したい

やりたいこと自体は単純なことなのですが・・

UNIXのコマンドで、
2つのディレクトリA、Bを比較して、
Aだけにあるディレクトリ・ファイルのみを取得できるようなものを教えてください。
(ファイルが同一かどうかは問題ではなくて、あくまでも存在不存在の比較です。)

コマンドを組み合わせたり、オプションを使ってもかまいません。

diffコマンドってこういうとき使えないのでしょうか。

Aベストアンサー

( cd (ディレクトリA) ; find . -print |sort ) > A.txt
( cd (ディレクトリB) ; find . -print |sort ) > B.txt
としてディレクトリリストを作っておいて
diff A.txt B.txt | grep '^<' (Aだけにあるファイル)
diff A.txt B.txt | grep '^>' (Bだけにあるファイル)
でどうでしょうか?

Qls であるファイル以外を表示したい

RH7.3です。
あるディレクトリ配下に多数のファイルがそんざいするのですが、
そのディレクトリで「ls」をしたときに"access_log"というファイル以外を表示させたいです。
 ls [!a]*
でやったのですが、access_logの他に access_log.1などがありそれも含まれてしまいます。
何かいい方法はないでしょうか?
できれば、ls コマンドひとつで処理したいと思っています。(正規表現で対応?)

Aベストアンサー

ls a*[0-9]* [!a]*

でどうでしょう。
先頭文字がaで始まり数字を含むファイルと、先頭文字がaではないファイルを表示します。「access1_log」というファイルがあってもちゃんと表示されますよ。でも、「access_log.a」なんかは表示されませんけど。

Qlinuxでディレクトリだけを表示させる方法

あるディレクトリに以下のファイルとディレクトリがあった場合に
dir1/ dir2/ file1 file2

lsだけだとすべて表示されるので、ファイルだけ表示やフォルダだけ表示させたいのですが可能でしょうか?

フォルダだけ表示の場合
dir1/ dir2/だけ表示させたいのですが方法がわかりません。

よろしくお願いします。

Aベストアンサー

ls -F | grep /
ls -F | grep -v /

Qgrepで検索文字列が完全一致した行だけ取り出す方法

grepの文字列検索で検索文字列が単語として、完全一致した行だけ取り出す方法はないでしょうか?

通常は
grep hoge hoge.txt

と打つと、hogeが含まれる行が出力されますが、今回は含まれる行ではなくて完全に文字列が一致した行だけ取り出したいのです。

例えばhoge.txtの中に
cc ghoge
kkl hogem
jjll hoge
という3行があったとしたら最後の行でhogeという文字が空白で区切られた行だけ取り出したいのです。

何かよい方法があれば教えてください

Aベストアンサー

-w オプションじゃだめですか?

参考URL:http://www.linux.or.jp/JM/html/GNU_grep/man1/grep.1.html

Q~以外を削除する場合(rmコマンド)

linuxのコマンドで
~以外のファイル、ディレクトリを全て削除したい時は
どのような記述をすれば良いのでしょうか?
シェルスクリプトではなくrmコマンド1つで削除したのいですが…

例: tar以外のファイル・ディレクトリを
   すべて削除したい場合など

どなたかご存知の方がいらっしゃったら
教えてください。よろしくお願い致します。

Aベストアンサー

rm コマンドのみという訳にはいきませんが基本的なコマンドを組み合わせると実現可能と思います。

「名前が tar で終わるもの以外のファイル・ディレクトリを削除する」場合だと

ls | grep -v -E 'tar$' | xargs rm -r

となります。

ファイルの一覧を取得し ( ls )
'tar'で終わるもの以外を抽出し ( grep )
その結果を rm -r の引数に指定して実行 ( xargs )

という流れです。

ファイルを削除するような操作については失敗するとダメージが大きいので、事前にテストして動作を確認すると良いとおもいます。また rm -r -i としてそれぞれのファイルについて、削除の問い合わせをするのも有効です。

Qシェルスクリプトでファイル内の数値文字列を数値として扱うには

失礼します。
シェルスクリプトでファイル内のテキスト(数値文字列)を取得して、それを使って計算するにはどうすれば良いでしょうか?

str:ファイル内のテキスト(数値文字列)

res=$(( $str + 1 ))

・エラー
")syntax error: invalid arithmetic operator (error token is "


よろしくお願いします。

Aベストアンサー

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをexprに書き換えたところ
$ ./test2.sh
Using expr
09:19:00.302748000
09:19:19.259990000

exprだと19秒ですが、$(( 演算 )) だと10秒程度なので、演算が多くなれば確かにexprは不利ですね。

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをe...続きを読む

Qレッドハットのバージョン確認方法

自分のサーバで使用しているREDHATのバージョン確認はどうすればいいのでしょうか?

more /etc/issue
とやっても英文しか出てきませんでした。

uname -all
でもカーネルのバージョンは出るのですが、REDHATのバージョンは出ませんでした。

Aベストアンサー

> more /etc/issue
> とやっても英文しか出てきませんでした。

その英文にはRedHatのバージョンは書いてなかったのですか?
書いていなかったとしたら、管理者により編集されている可能性
がありますね。

cat /etc/redhat-release

ではいかがでしょう?
やっぱり英文ですけど。

rpm -q redhat-release

でもいいかも

Qsqlplusで表示が変なので、出力を整形したい。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------

上記のように意味不明な形式で出てきます。

例えばこんな風に

select カラム1,カラム2,カラム3 from hoge;

カラム1 1の値
---------------------------
カラム2 2の値
---------------------------
カラム3 3の値

等のように分かりやすく表示できないでしょうか?

ちなみにOracle9iR2を使用しています。
sqlに関するツールは使用できないルールでして、あくまでsqlplusのコマンド上でみやすくしなければなりません。

分かりづらくですいませんが、皆さま、ご教授お願いします。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
-----------------------...続きを読む

Aベストアンサー

SQLPLUSを起動して、

SQL>set linesize 列数

でどうだ。

SQL>show linesize

で確認ができる。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報