シェルスクリプトを作成し、ディレクトリを表すコマンドライン引数を送信する必要があります。その後、そのディレクトリ内のすべてのファイルのすべてのファイル名と行番号を再エコーする必要があります。また、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