設定

設定

私はとんでもない数字のファイル名を持つPDFファイルをブラウザから頻繁にダウンロードします。理想的には、次のように~/Downloadsこれらのファイルを開くことができることを願っています。

evince "the most recently modified file"

ファイルを開かずにファイル名を見つけます~/Downloads

「最近変更されたファイル」を指定する簡単な方法はありますかbash

注:私はこれであることを知っています可能ls -tしかし、理想的には名前を解決するよりも~/Downloads簡単な解決策を探しています。

答え1

evince "$(ls -t | head -n1)"

スペース、タブ、および印刷特殊文字を処理できますが、ファイル名に改行やその他の印刷されていない文字が含まれていると中断されます。

答え2

これはより正確で強力なアプローチls -tですが、少し複雑になります。

設定

短いシェルスクリプト(下のコード)を$PATH~/bin

確認することを忘れないでください

  • スクリプトが実行可能です。chmod +x ~/bin/script_name
  • ~/binあなたの$PATH

使用法

~/Download最新のファイルに対して実行するコマンドをlast_download

はい

スクリプト名を指定すると仮定last_download

  • last_download(パラメータなし):evince最新のファイルに対して基本コマンドを実行します。~/Downloads
  • last_download mplayermplayer:最新ファイルで実行~/Downloads
  • last_download cp -t ~/Desktop:最新のファイルを~/Downloads次の場所にコピーします。~/Desktop

パスワード

#!/bin/sh
# Usage: last_download [cmd [options]...]

newest=
dir=~/Downloads

# default command
if [ $# -eq 0 ]; then
        set -- evince;
fi

# find newest file
for f in "$dir"/*; do
        if [ -z "$newest" ] || [ "$f" -nt "$newest" ]; then
                newest="$f"
        fi
done
if ! [ -e "$newest" ]; then
        exit 1
fi

# run command on newest file
"$@" "$newest"

注:このスクリプトは表示のみです~/Downloadが、すべてのディレクトリをサポートするように一般化することは難しくありません。この場合、名前も変更する必要があります。

答え3

exec zsh
evince ~/Downloads/*.pdf(om[1])

またはzshに切り替えたくない場合

cd ~/Downloads
zsh -c 'evince ./*.pdf(om[1])'

括弧の間のビットは次のとおりです。グローバル予選om名前の代わりに変更時間を使用するようにグローブの順序を変更します(最新のエントリから)。[1]最初の一致のみが使用されることを意味します。

詳細については、次を参照してください。これは、「zshでグローブをフィルタリングする方法」への答えです。

答え4

いいえ、一部のシステムログファイルが最近更新されても通常は更新されていないかどうかはわかりません。

ただ避けたい場合は、Kevinの答え(彼が私に勝ちました)が効果的です。手動開かれる~/Downloads

関連情報