0

コマンドラインマスターの皆様へ

1行に2つのエントリを含むファイルを生成したいディレクトリツリーがあります。各ファイルのフルパスと、そのファイルの対応する権限です。

たとえば、1 行に次の内容が含まれる場合があります。

/v1.6.0.24/lib/mylib.jar -r-xr-xr-x

左側の列を生成する最良の方法は、findのようです。ただし、lsにはファイル名のリストを読み取ったり、stdin を取得したりする機能がないように見えるため、これを行うスクリプトに頼らなければならないようです。...面倒。

見つかったファイルごとにコマンドを実行するために人々が何らかの方法で find を取得するのを見たことがあると確信していましたが、今朝はそれを理解できないように見えるので、私はばかげているに違いありません!

誰?

上記のファイルの読み取りに関しては、ファイル名にスペースが含まれている可能性があるため、既存のコマンドライン ツールの一部でフィールドを右から左にカウントする方法があれば、それは確かに素晴らしいことです。たとえば、カットしました。ただし、cutは左から先であり、右側から番号付けを開始することを意味する負の数を取りません (私には最も明白な構文のようです)。... プログラムを書かなくても、簡単な方法はありますか?

事前に感謝します。あなたが提供する可能性のある例を説明してくれて特に感謝します!

ありがとう、RT

4

4 に答える 4

3

GNU findutils4.2.5+:

find -printf "$PWD"'/%p %M\n'
于 2010-02-12T19:05:23.067 に答える
1
stat -c %A file

ファイルのファイル許可を出力します。

何かのようなもの:

find . -exec echo -ne '{}\t\t' ';' -exec stat -c %A {} ';'

あなたの後のもののひどくフォーマットされたバージョンをあなたに与えるでしょう。

すべてをテーブルに揃える必要があるため、これは非常に複雑です。「column」コマンドを調べてみてください。TBH 出力要件を少し緩和します。SH で出力をフォーマットするのは面倒です。

于 2010-02-12T19:29:47.533 に答える
0

bash 4

shopt -s globstar
for file in /path/**
do
    stat -c "%n %A" "$file"
done
于 2010-02-13T00:37:41.610 に答える
0

ls と awk でも実行できます。

ls -l -d $PWD/* | awk '{print $9 " " $1}' > my_files.txt
于 2010-02-12T19:20:47.903 に答える