ディレクトリ内の各ファイルの名前と行番号をエコーし​​ます。

ディレクトリ内の各ファイルの名前と行番号をエコーし​​ます。

シェルスクリプトを作成し、ディレクトリを表すコマンドライン引数を送信する必要があります。その後、そのディレクトリ内のすべてのファイルのすべてのファイル名と行番号を再エコーする必要があります。また、10分以下の最初の10個のファイルに対してのみこれを行う必要があります。

find "$1" -cmin -10 -type f | head -10 

10分以上前に更新されたファイルを参照しようとしましたが、エラーが発生しました。そして私はこれらの名前を取得する方法を知りません。すべての助けに事前に感謝します。

私のファイル名は無料です。私が受け取るエラーは、私のホームディレクトリをパラメータとして渡すときに権限が拒否されることです。だから、リストを得られませんでした。ファイル名のリストと各ファイルの行数を取得する必要があります。

/bin/bash ss1 /home/ivana端末に入力すると、次のエラーが発生します。

find: '/home/ivana/.cache/dconf': Permission denied

私はLinuxを使用しています。

ベストアンサー1

さて、最初にやるべきことです。あなたが受け取るエラーは関係ありません。それはあなた/home/ivana/.cache/dconfの特定のサブディレクトリ()が$HOMEあなたの所有ではないという意味です。を使用しているため、これはほぼ確実に発生しますsudo。簡単な修正方法は次のとおりです。

sudo chown -R ivana /home/ivana/

これにより、背後にあるすべてのファイルとディレクトリの所有権が$HOME自分のユーザー名に変更されます。他のユーザーが正しく所有しているコンテンツがある場合は、ディレクトリの所有権を簡単に変更できますdconf

sudo chown -R ivana /home/ivana/.cache/dconf

これでこれを正しく実行し、任意のファイル名を処理する方法は次のとおりです。

find "$1" -cmin -10 -type f -print0 | head -z -n 10 

これにより、見つかったすべてのファイルが改行文字findではなく末尾に印刷され、名前に改行文字を含むファイルを処理できます。\0オプションを使用すると、区切られた入力が読み取られ-zます。head\0

次のステップは、各ファイルを読み取り、対応する行番号を印刷することです。

find "$1" -cmin -10 -type f -print0 | head -z -n 10 |
    while IFS= read -r -d '' file; do wc -l "$file"; done

IFS=入力フィールドの区切り記号をnullに設定すると、-r特別なread処理は発生せず\(したがって\tタブにならない)、読み取りにデータを区別するように-d ''指示します。read\0

おすすめ記事