1

私の要件は、Linuxボックスにsshしてからディレクトリに移動し、Javaコードを介して最新のファイル名を取得することです。

最新のファイル名の取得に行き詰まっています。これが私が使用しているものです

ls -ltr /abc/dir/sub_dir|tail -n 1|cut -d' ' -f 11

しかし、これは常に機能するとは限りません。通常、ディレクトリで ls -ltr を実行すると、出力は次のパターンのようになります。

-rw-r--r-- 1 xyz users   2070 May 27 20:16 9ZVU8ZNLL.xml
-rw-r--r-- 1 xyz users   1507 May 28 02:29 VU8ZNLL.xml
-rw-r--r-- 1 xyz users   1507 May 28 13:59 U8ZNLL.xml
-rw-r--r-- 1 xyz users    944 May 28 14:46 Q9ZVU8ZNLL.xml

上記のユーティリティを使用すると、ファイル名を取得したり、日付やタイムスタンプを取得したり、以降の処理で問題を引き起こす null 値を取得したりすることがあります。最新のファイル名のみを取得する最良の方法は何ですか。

4

3 に答える 3

1

これは機能するはずですが、ファイル名にスペースが含まれていると機能しなくなります。

ls -ltr | tail -n 1 | awk '{ print $NF }' 

コメントで@EricJablowが述べたように、オプションをバイパスして完全-lにスキップできます。awk

ls -tr | tail -n 1
于 2013-05-29T03:50:37.660 に答える
0

リモート マシンで Java プログラムを実行していますか、それともローカルで実行していてそこから ssh を起動しようとしていますか? 何らかの方法で ssh を呼び出してリモート マシンでコマンドを実行するローカル プログラムが必要な場合は、JCraft の jSch ライブラリを参照してください。これはAyberk Cansever による例です。例のコマンドの代わりに、他の人が提供した UNIX パイプラインを使用できます。

ssh を呼び出して、リモート マシンで Java ファイルを実行しようとしている場合、割り当てのポイントは、Java プログラムからシェルを呼び出すことではなく、Java 7Filesオブジェクトまたはそのオブジェクトの機能を使用することだと思います。以前の Java バージョンの前任者。Files.readAttributes()Files.walkFileTree()、および を見てくださいFiles.getLastModifiedTime()。この場合、Java からは何も得られないため、これはありそうにありません。

于 2013-05-29T04:20:22.217 に答える
0

同様の使用例があります。ディレクトリ内のパターン「foo」に一致する最新のフォルダーを見つけます。同じことを簡単に適応させて、任意のファイルを見つけることができます。

試す:

find . -mindepth 1 -maxdepth 1 -name "*" -type f -printf '%f\n' | xargs ls -d --sort=time | head -1

find "." ... directory path
-name "*" ... pattern match
-type f ... only find files, no directories

結果は変換され、時間でソートされ、最新の要素が返されます。

于 2013-05-29T04:21:34.793 に答える