web-dev-qa-db-ja.com

「または」オプションを使用してファイルをキャットする方法

私は次のようなファイル名を持っています

/etc/auto.abc on server 1
/etc/auto.def on server 2
/etc/auto.ghi on server 1

私はすべてのサーバーに対して単一のスクリプトを作成しており、その中でファイルをcatしたいと思っています。

例:cat /etc/auto.abcまたは/etc/auto.defまたは/etc/auto.ghi。存在するファイルを取得できるはずです。

ありがとう、

1
venella

ファイルに対して操作を実行する前に、スクリプトを使用してファイルの存在を確認してみませんか?

#!/bin/bash
if test -f "/etc/auto.def"; then cat /etc/auto.def;
Elif test -f "/etc/auto.ghi"; then cat /etc/auto.ghi;
Elif test -f "/etc/auto.abc"; then cat /etc/auto.abc;fi

出典:

http://www.shellhacks.com/en/HowTo-Check-If-a-File-Exists

http://www.thegeekstuff.com/2010/06/bash-if-statement-examples/

0
Elder Geek

このようなもの:

if [[ $(find . -name "auto*" -type f -maxdepth 1 -printf '\n' | wc -l) -eq 1 ]]
then
   cat auto*
else
   echo there are more files that match 'auto*'
fi

-printf '\n'は、改行を含むファイル名を正しく処理するためにあります( この回答 を参照)。 elseでは、auto*パターンに一致するファイルが複数ある場合に状況を処理する必要があります。ここで何をするかはあなたの決定です。

2

ファイルグロブ の使用を検討しましたか?

最も寛容な方法は次のとおりです。

cat /etc/auto*

しかし、あなたの場合は次のようになります。

cat /etc/auto.???

もちろん、ifそのグロブに一致する他の不要なファイルがある可能性があります。またはif3つのファイルのうち複数が存在する可能性があります(1つだけが必要です)。これは、これらすべての可能性を考慮しているわけではありません。しかし、それは確かに最も単純な方法です。

0
Wildcard