GNU/Linux >> Linux の 問題 >  >> Linux

フォルダーにファイルがあるかどうかを確認し、それに応じて終了する方法 (KSH)

Kusalananda の回答に対する Stéphane Chazelas のコメントをフォローアップするには:

$ ksh
$ echo ${.sh.version}
Version AJM 93u+ 2012-08-01
$ ls
TABLE1.csv  TABLE2.csv

ファイルを保持するために配列を使用します。一部のファイルに一致する glob 式から始めます:

$ typeset -a files
$ files=( ~(N)*.csv )
$ echo "${#files[@]}"
2
$ typeset -p files
typeset -a files=(TABLE1.csv TABLE2.csv)

一致しない「素の」グロブは、一致しないグロブが文字列としてグロブ パターンに置き換えられることを示します。

$ files=( *.txt )
$ echo "${#files[@]}"
1
$ typeset -p files
typeset -a files=('*.txt')

"null glob" プレフィックス付き

$ files=( ~(N)*.txt )
$ echo "${#files[@]}"
0
$ typeset -p files
(empty output)
$

ksh man ページのファイル名生成セクションを参照してください。

質問に具体的に答えるには:

typeset -a contents=( ~(N)"$gp_path"/ALLSTUFF*.zip )
if [[ ${#contents[@]} -eq 0 ]]; then
    print 'EMPTY'
    exit 0
else
    print 'NOT EMPTY'
fi

ALLCAPS 変数名を使用する習慣をやめるべきです。

参照:https://mywiki.wooledge.org/ParsingLs


2>/dev/null でエラーメッセージを消すことができます ls の中 .

次に、$CONTENTS かどうかを確認できます。 -z で空です

CONTENTS=$(ls -d -- "${gp_path}ALLSTUFF"*.zip 2>/dev/null)
if [ -z "$CONTENTS" ]; then
    print 'EMPTY'
    exit 0
else
    print 'NOT EMPTY'
fi

ファイル名パターンが何かに展開されるかどうかを検出するには、

set -- "$gp_path"ALLSTUFF*.zip

if [ -e "$1" ]; then
    echo matched something
else
    echo did not match anything
    exit 1
fi

set コマンドは、パターンに一致したファイル名に位置パラメータを設定し、最初に一致したファイル名が存在する場合は、何かに一致しました。何にも一致しなかった場合、パターンは展開されないままになります。

これは ksh で使用できます 、 bash およびその他の sh のようなシェル。


Linux
  1. WcとPipingを使用して、特定のディレクトリにあるファイルとディレクトリの数を見つける方法は?

  2. サイズと拡張子でファイルを検索する方法は?

  3. Unix で空のディレクトリとファイルを見つけて削除する方法

  1. Linux で空のディレクトリとファイルを見つけて削除する方法

  2. フォルダーとそのサブフォルダー/ファイルのアクセス許可をワンステップで変更する方法は?

  3. ファイルを見つけてそのサイズを合計するにはどうすればよいですか?

  1. Linuxでトップディレクトリとファイル(ディスク容量)を見つける方法

  2. MySQL、PHP、Apacheの設定ファイルを見つける方法

  3. ディレクトリとサブディレクトリ内のファイル数を見つける方法