結果のないジョブスクリプトがあります。疑わしいことの1つは、名前付きファイルの一部が欠落していることです。ジョブスクリプトの関連部分は次のとおりです。
echo get_data
get_fms_data \
amip1 \
seaesf \
albedo \
lad \
topog \
ggrpsst \
mom4 \
/data0/home/rslat/GFDL/archive/edg/fms/river_routes_gt74Sto61S=river_destination_field \
/data0/home/rslat/GFDL/archive/fms/mom4/mom4p1/mom4p1a/mom4_ecosystem/preprocessing/rho0_profile.nc \
/data0/home/rslat/GFDL/archive/fms/mom4/mom4p0/mom4p0c/mom4_test8/preprocessing/fe_dep_ginoux_gregg_om3_bc.nc=Soluble_Fe_Flux_PI.nc \
/data0/home/rslat/GFDL/archive/jwd/regression_data/esm2.1/input/cover_type_1860_g_ens=cover_type_field \
/data0/home/rslat/GFDL/archive/jwd/regression_data/esm2.1/input/soil_color.nc \
/data0/home/rslat/GFDL/archive/jwd/regression_data/esm2.1/input/biodata.nc \
/data0/home/rslat/GFDL/archive/jwd/regression_data/esm2.1/input/ground_type.nc \
/data0/home/rslat/GFDL/archive/jwd/regression_data/esm2.1/input/groundwater_residence.nc \
/data0/home/rslat/GFDL/archive/ms2/esm2.1/input/max_water.nc \
...
最初のステップとして、これらすべてのパスをテキストファイルにコピーして、実際に存在することを確認したいと思います。
簡単な方法がありますか?他の質問も見つけましたが、ほとんどがファイルでスキャンするのではなく、1つのファイルだけをスキャンするという内容がほとんどです。
ありがとうございます!
ベストアンサー1
これは1つの方法です(GNUツールを使用すると仮定)。
grep -Po '^\s*\K/.*' file |
sed 's/\s*\\//' |
while IFS= read -r path; do
[[ -e "$path" ]] &&
printf 'FOUND: "%s"\n' "$path" ||
printf "ERROR: '%s' doesn't exist\n" "$path";
done
説明する
grep -Po '^\s*\K/.*'
:0個以上の空白文字で始まり、後に続く行のみを検索します/
。これにより、宛先パスが印刷されます。sed 's/\s*\\//'
:すべての末尾のスペースと末尾のバックスラッシュを削除します。while IFS= read -r path; do
:各行(パス)を変数として読み込みます$path
。[[ -e "$path" ]] && printf 'FOUND: "%s"\n' "$path"
:パスが存在する場合は、関連メッセージを印刷します。|| printf "ERROR: '%s' doesn't exist\n" "$path";
: 存在しない場合はエラーメッセージを出力します。