私はfind
ファイルのリストを取得し、パスの一致にgrepを使用しました。
$ find pc* | grep -i arthur
pc6/arthurv/untitled-2.py
pc6/arthurv/untitled-3.py
pc6/arthur.py
pc9/Arthur 4C
pc9/Arthur 4C/untitled-1.py
pc9/Arthur 4C/untitled-2.py
私はこれを行い、ls -F
各ディレクトリに1つずつ追加したいと思います。/
または、一致するすべての大文字と小文字を区別せずに表示するディレクトリを見つける方法はarthur
?
答え1
find
GNUで条件付き処理を実装するには、式に論理和を使用できますfind
。
find pc* -type d -printf "%p/\n" -o -print
「pc *」に一致するファイルとディレクトリで始まるパスですべてのエントリを見つけてその名前を印刷し、ディレクトリの場合は「/」と表示されます。
仕組みは次のとおりです。
pc*
開始パスを指定します。-type d
一致ディレクトリ-printf "%p/\n"
現在処理されているファイルのパスを印刷し、その後に「/」と改行文字が続くので、一致する-type d
場合にのみ実行されます-type d
(暗黙的な接続詞があります)。-o
論理和の紹介:前の表現が一致しない場合は、その後の表現が評価されます(-type d -printf "%p/\n"
接続が論理和より優先順位が高いため、前の表現がここにあります)。-print
現在処理中のファイルのパスを出力します。
追加のfind
式を使用して、大文字と小文字を区別しない「arthur」に一致するすべてのディレクトリを表示できます。
find . -type d -iname "*arthur*"
答え2
find
多くのオプションと詳細があります。別のバリエーションは、以下を-printf
使用することです。%y
$ find . -printf "%p:%y\n"
./dir:d
./file:f
ここで%y
「d」または「f」を追加することは次のとおりです。ls -l
$ find . -printf "%p%y\n" | sed 's!d$!/! ; s!f$!!'
答え3
すべてのファイルとディレクトリを一覧表示するには、ここに回答を追加してください。
cat <(find old.files -type d -printf "%p/\n") <(find old.files -type f)
出力:
dir1/dir2/
dir1/test.txt
dir1/dir2/test2.txt
後にスラッシュがない前の質問dir1/dir2
:
dir1/dir2
dir1/test.txt
dir1/dir2/test2.txt
最終的にはtarファイルとディレクトリを比較できるということです。
diff <(tar tf old.files.tar | sort -u) <(cat <(find old.files -type d -printf "%p/\n") <(find old.files -type f) | sort -u)