ディレクトリに多くのファイルがあり、その中に予想されるファイルのリストがあります。
例: 私が持っているファイルは次のとおりです。
- ファイル1
- ファイル2
- ファイル3
予想されるファイルは
- ファイル1
- ファイル2
- ファイル4
私はディレクトリをテストしたいと思い、file4がディレクトリにないことがわかりました。
答え1
ファイル名を含む配列があり、ディレクトリに存在しないファイルを見つけるには、配列を繰り返してファイルが存在することを確認します。 (すべての種類の一般的なファイル-f
テスト)-e
files=(file1 file2 file4)
for f in "${files[@]}" ; do
[ -f "$f" ] || echo "$f: not found"
done
その逆も似ていますが、二重ループが必要な場合、または配列を連想配列に切り替える必要があります。ダブルループを使用してください。
files=(file1 file2 file4)
for f in * ; do
found=0
for g in "${files[@]}" ; do
[ "$f" = "$g" ] && found=1
done
[ "$found" = 0 ] && echo "$f: in directory but not listed"
done
答え2
配列の結合と減算の場合は、代わりにzsh
検索してくださいbash
。
$ expected=(file1 file2 file4)
$ existing=(file1 file2 file3) # or existing=(file*) to use globbing
$ echo missing: ${expected:|existing}
missing: file4
$ echo found: ${expected:*existing}
found: file1 file2
$ echo unexpected: ${existing:|expected}
unexpected: file3
ニーモニック(少なくとも私のもの、公式であるかどうかはわからない):
${A:|B}
:ポイント$A
バーそれら$B
${A:*B}
:ポイント$A
主演それら$B
。
答え3
複数のファイルをテストする必要がある場合、関数はより良いソリューションです。それ以外の場合は、単純なls
ファイルで十分です!探しているファイルが存在しない場合に得られる出力は次のとおりです。
../theDirIWantToCheck $ ls theFileIWantToFind.txt
ls: theFileIWantToFind.txt: No such file or directory
また、タブ補完を使用することをお勧めします。コマンドを実行しls
、必要なファイル名の入力を開始します。数文字を入力してTabキーを押すだけです(動作しない場合はTabキーを2回押します)。パターンに一致するすべてのファイル名を表示します存在する場合。
$ ls fi<tab>
file1.txt file2.txt file3.txt file_new.txt filetypes.txt
ls
複数のパラメータを渡して複数のファイルを確認することもできます。
$ ls file1.txt file2.txt file3.txt
...
ファイルが同じパターンプレフィックス(たとえば、上記:file1、file2、file3)を共有している場合は、中かっこ拡張を使用できます。これは、3つのパラメータすべてを圧縮形式で渡すのと同じです。..
範囲を示します。
$ ls file{1..3}.txt
ls: file1.txt: No such file or directory
ls: file2.txt: No such file or directory
ls: file3.txt: No such file or directory
あるいは、ワイルドカードを使用して、共通のプレフィックス "file"(例:file1.txt、file_other.txt)を持つ可能なすべての一致パターンを渡すこともできます。
$ ls file*
...
最後ls
にecho
.-l
サイズls
と最後の修正日/時間。
答え4
perl -le '-e or print for qw/file1 file2 file4/'