ディレクトリ内のすべてのファイル(隠しファイルを含む)を繰り返し印刷し、ファイル数、隠しファイル、隠しディレクトリ、およびディレクトリを記録するbashスクリプトを作成しようとしています。これは課題の一部なので、または-R
を使用することはできませんfind
。du
listAllFiles()
{
local dir=$1
local file
directoryCounter=0
fileCounter=0
hiddenFileCounter=0
hiddenDirectoryCounter=0
for file in "$dir"/*; do
if [[ -d $file ]]; then
listAllFiles "$file"
directoryCounter+=1
elif [[ -f $file ]];then
fileCounter+=1]
ls -l $file
elif [[file is a hidden directory]];then
listAllFile "$file"
hiddenDirectoryCounter+=1
elif [[file is a hidden file]];then
hiddenFileCounter+=1
ls -l $file
fi
done
}
ファイル/ディレクトリが隠されているかどうかを検出する方法はありますか?
答え1
隠しファイルとディレクトリの名前はで始まるので、.
Bashで次のソリューションを使用できます。
# Skip '.' and '..':
if [ "$file_name" = . ] || [ "$file_name" = .. ];then
continue
fi
# Find hidden files:
if [[ "$file_name" =~ ^\. ]];then # if file name starts with a .
...
答え2
少なくともファイルシステムメタデータに割り当てられているいくつかの属性に基づいていないUnixネイティブファイルシステムには、隠しファイルやディレクトリはありません。
カスタマイズのために、一部のコマンド(例えば、ls
)は、デフォルトで名前 ""で始まるファイル/ディレクトリを表示しません.
。他のツール(たとえば、ノーチラス)はこの規則に従います。マニュアルページを見ると、ls
隠しファイルに書き込まれません。
-a, --all
do not ignore entries starting with .
~によるとウィキペディアこの動作は、初期のUnixのソフトウェアのバグが原因で発生します。
.find
ls
Windowsファイルシステムには、プロパティベースの隠しファイルがあります。これ質問。
ls
人々が隠し動作を隠したファイルがあると間違えることが多いので、あなたの課題のいくつかは難しい課題のようです。
答え3
find /directory_path -type f | wc -l
ファイル数を教えてくれます
find /directory_path -type d | wc -l
ディレクトリ数を教えてくれます