8

次のようにして、OSX用のKeyboardMaestroのマクロを作成しようとしています。

  1. 作成された日付に基づいて、ディスク上のディレクトリにある最新のファイルの名前を取得します。
  2. 「最新のファイル:」というテキストと最新のファイルの名前を貼り付けます。

そのオプションの1つは「シェルスクリプトを実行する」ことなので、1でそれができると思いました。少しグーグルした後、私はこれを思いつきました。

cd /path/to/directory/
ls -t | head -n1

これにより、正しくソートされ、最初のファイル名が返されます。しかし、それは私が望まない改行も含んでいるようです。2については、アプリで別のアクションを使用して「newest file:」というテキストを出力し、その後ろにファイル名を貼り付けることができます。しかし、「ランダムテキスト」とコマンドの結果を返すことができないのではないかと思いますls

だから私の質問は:lsコマンドを使用してのみこれを行うことができますか?また、改行や戻り値なしで最新のファイルの名前だけを取得するにはどうすればよいですか?

4

5 に答える 5

13

すでにパイプを使用しているので、そこに別のパイプを投げるだけです。

ls -t | head -n1 |awk '{printf("newest file: %s",$0)}'

(「printf」には最後に「\ n」が含まれていないことに注意してください。これにより、改行が削除されます)

編集:

最初の行の後に awk を終了するという Arkku の提案により、次のようになります。

ls -t | awk '{printf("newest file: %s",$0);exit}'
于 2010-05-15T01:07:18.267 に答える
4
cd /path/to/directory/
echo -n "random text goes here" $(ls -t | head -n1)

必要に応じて、同じ方法で最後にテキストを追加できます。

于 2010-05-15T01:03:56.160 に答える
4

の出力を使用するlsことは悪い習慣です。

find -type f -printf '%T+ %p\n' | sort -r | head -n 1

于 2017-01-18T16:33:08.587 に答える
2

次のように、単一のステートメントで bash でそれを行うことができます。

echo -n "newest file: $(ls -t |head -n1)"

なしでその改行を削除することもできますecho

ls -t |head -n1 |tr -d '\n'

lsが非 tty ストリームに色を出力しないようにしてください(つまり、色を指定するls --color=neverls --color=auto、まったく指定しないか)。

このlsソリューションは、変更時間でソートされたあらゆる種類のファイルを出力します。通常のファイルのみが必要な場合、またはディレクトリが必要ない場合はfind、 andを使用できxargsます。

echo -n "newest file: $(find . -maxdepth 1 -type f -print0 |xargs -0 ls -t)"
于 2010-05-15T01:40:00.717 に答える
-1

だけではできませんls。ただし、echo通常はシェルに組み込まれているため、実際にはスクリプトにオーバーヘッドが追加されることはありません。ファイルの名前だけを取得するには、次のことをお勧めします。

echo -n "newest: $(ls -t1 | head -n1)"

なんらかの理由で本当に を削除したい場合はhead、次のようなものを使用できると思います。

ls -t1 | ( read n; echo -n "newest: $n")

readシェルに組み込まれていますが、そうでheadはありません。)

質問で指定されていないため、これらのソリューションはサブディレクトリに再帰しないことに注意してください。実際、サブディレクトリは最新の「ファイル」として出力される場合があります。

于 2010-05-15T01:20:53.490 に答える