では/bin/sh
、スクリプト、私は(「」は別にして「..」、もちろん)ディレクトリが一つだけサブディレクトリなし他のファイルが含まれているかどうかを確認したいと思います。私はおそらくの出力を解析することができましたがls
、それは一般的には悪い考えであることも理解しています。提案?
質問の理由:zip
WindowsマシンなどのフォルダーをLinuxで解凍すると、元のフォルダーと同じ内容のディレクトリが表示されることがあります。時々私はちょうど1つのサブディレクトリを含むディレクトリを取得します。その内容は元のフォルダの内容です。(私は、zip
Windowsで使用する方法が異なるか、使用するさまざまなWindowsマシンの構成がわずかに異なるか、または...誰が知っているかを推測します。)どういうわけか、Linux側では、両方の種類の結果をほぼ同じ方法で処理するため、この質問。
これらの考え方は、「あなたのWindows側のフォルダが本当に場合はどうでしたちょうど1サブディレクトリが含まれている?」、私はそれが問題仕様のコーナーケースだということを認めるが、それはOKで、この場合にはだと起こります。
find
これには良いツールでしょう。それはいくつかのきちんとした議論を持っています:
-maxdepth 1
したがって、再帰的に検索しません-type d
ディレクトリのみを検索-printf 1
奇妙なファイル名の問題を克服する(1
ファイル名の代わりに印刷する)完全なコマンドは次のとおりです。
find DIRECTORY -maxdepth 1 -type d -printf 1
これにより、ディレクトリごとに1文字とディレクトリ自体が出力されるので、2文字を出力するディレクトリを検索します(findには、検索時に無視する優れた機能が.
あり..
ます)。
次に、他の(ディレクトリ以外の)ファイルがないかどうかを確認します。
find DIRECTORY -maxdepth 1 ! -type d -printf 1
完全なチェックは次のようになります。
if [ "$(find DIRECTORY -maxdepth 1 -type d -printf 1 | wc -m)" -eq 2 \
-a "$(find DIRECTORY -maxdepth 1 ! -type d -printf 1 | wc -m)" -eq 0 ]; then
# It has only one subdirectory and no other content
fi
それとも、あなたが使用してコマンドを1つ作ることができる-printf
の%y
(ファイルタイプ印刷しd
たディレクトリのために):
if [ "$(find DIRECTORY -maxdepth 1 -printf %y)" = "dd" ]; then
# It has only one subdirectory and no other content
fi
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加