0

重複の可能性:
タイムスタンプに基づいて最新のファイルを取得します

私は主に特定のフォルダから最新のダンプファイルを選択して、変数に保存し、インポートスクリプトを使用してインポートを使用できるようにします

特定のファイルから特定のファイルを一覧表示したいのですが、次のことを試しました。

a= $(ls -ltr /home/oracle/testora/MAUL01*.dmp | awk '{print $9}' | tail -1)
echo $a

次のように出力したい:

MAUL01.DP.09-27-2012_09_15.dmp

それ以外の:

/home/oracle/testora/MAUL01.DP.09-27-2012_09_15.dmp

問題:sh内でlsが機能していません(unixからは正常に機能しています)ファイル名がパスで表示されます(basenameを使用して試しましたが、機能させることができません)

4

5 に答える 5

2

bashでは、構文を使用して${parameter##word}、最後のの前のすべてを削除できます/

を使用することもできます。ls -tr1そうすれば、は必要ありませんawk

これを以下に示します。

a=$(ls -tr1 /home/oracle/testora/MAUL01*.dmp | tail -1)
echo ${a##*/}
于 2012-09-27T14:08:32.273 に答える
1

コードは機能しません。の後にスペースがありa=ます。basenameこれを簡単に修正します。

name="$(basename /home/oracle/testora/MAUL01*.dmp)" # Assumes only one glob match
echo "$name"

また、MoreQuotes™</a>を使用し、出力を解析しないlsでください。問題がファイルの並べ替えである場合は、次の解決策を確認してください。

IFS= read -r -d '' -u 9 9< <(find /home/oracle/testora/ -maxdepth 1 -name 'MAUL01*.dmp' -printf '%TY-%Tm-%TdT%TH:%TM:%TS %p\0' | sort -rz)
path="${REPLY#* }"
echo "$(basename "$path")"

はい、Bashでファイル名を処理するのは面倒です。

于 2012-09-27T14:21:28.703 に答える
0

これを試して:

a=$(ls -ltr /home/oracle/testora/MAUL01*.dmp | awk '{print $9}' | tail -1)
echo $(basename $a)
于 2012-09-27T14:01:11.687 に答える
0

ここに行きます(そこにベース名は必要ありません):

cd /home/oracle/testora
latest="$(ls -t MAUL01*.dmp | sed q)"
echo "The latest one is $latest $USER"

そしてfindで:

cd /home/oracle/testora
latest="$(
    find -maxdepth 1 -name 'MAUL01*.dmp' -printf '%As %f\n' |
    sort -nk1 |
    tail -1
)"
于 2012-09-27T13:59:39.547 に答える
0

パラメータ拡張で簡単に(そして安全に)実行できます。ls(これは危険であり、オペレーティングシステム間で動作が異なります)またはfind(-print0およびNULで区切られたストリームを処理するためのいくつかのトリックと一緒に使用しない限り危険です)のいずれも必要ありません。これはPOSIXsh互換バージョンです。

set -- /home/oracle/testora/MAUL01*.dmp
for filename; do
  echo "${filename##*/}"
done

代わりにbashを使用している場合は、globの出力を配列に格納できるため、オーバーライドすることはできません$@

shopt -s nullglob
filenames=( /home/oracle/testora/MAUL01*.dmp )
for filename in "${filenames[@]}"; do
  echo "${filename##*/}"
done

最新のファイルのみをフィルタリングする場合は、http://mywiki.wooledge.org/BashFAQ/003を参照してください。

于 2012-09-27T14:46:33.817 に答える