Linuxディレクトリにサブディレクトリが1つだけ含まれ、他のファイルが含まれていないかどうかをテストするにはどうすればよいですか?

ジョン:

では/bin/sh、スクリプト、私は(「」は別にして「..」、もちろん)ディレクトリが一つだけサブディレクトリなし他のファイルが含まれているかどうかを確認したいと思います。私はおそらくの出力を解析することができましたがls、それは一般的には悪い考えであることも理解しています。提案?

質問の理由:zipWindowsマシンなどのフォルダーをLinuxで解凍すると、元のフォルダーと同じ内容のディレクトリが表示されることがあります。時々私はちょうど1つのサブディレクトリを含むディレクトリを取得します。その内容は元のフォルダの内容です。(私は、zipWindowsで使用する方法が異なるか、使用するさまざまなWindowsマシンの構成がわずかに異なるか、または...誰が知っているかを推測します。)どういうわけか、Linux側では、両方の種類の結果をほぼ同じ方法で処理するため、この質問。

これらの考え方は、「あなたのWindows側のフォルダが本当に場合はどうでしたちょうど1サブディレクトリが含まれている?」、私はそれが問題仕様のコーナーケースだということを認めるが、それはOKで、この場合にはだと起こります。

StenSoft:

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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ