7

シェル スクリプトを使用して、すべてのファイルを日付順に並べ替えたいと考えています。

たとえば、/Users/KanZ/Desktop/Project/Test/、および.M1.hA2.hF4.h

各ファイルの時間は異なります。これらすべてのファイルを日付と時刻で最も古いものから最新のものに並べ替えるにはどうすればよいですか?

現在、私は名前変更スクリプトを持っています:

cd /Users/KanZ/Desktop/Project/Test/ 
n=1
for file in *.jpg;
do 
  echo $file prefix=M file_name=M$n.jpg 
  echo $file_name n=$(( $n+1 ))
  mv $file $file_name 
done 

初めてスクリプトを実行すると、JPG ファイルは になりますが、M1.jpgこのディレクトリに新しいファイルを追加してスクリプトを再度実行すると、に置き換えられます(スクリプトを実行する前に、このファイルは という名前でした)。手紙はそして先に来ました。M2.jpgM3.jpgA1.jpgM1.jpgM2.jpgM3.jpgM4.jpgA1.jpgAM

M1M2M3およびを取得したいと思いM4.jpgます。

4

4 に答える 4

10

このlsコマンドは、最終更新時刻で簡単に並べ替えることができます。

$ ls -1t /Users/KanZ/Desktop/Project/Test

並べ替えを逆にするには、次の-rオプションを含めます。

$ ls -1tr /Users/KanZ/Desktop/Project/Test

追加のメタデータ (長さ、変更時間など) なしで 1 行に 1 つのファイルを出力する1よう指示を含めます。これは、さらに処理するためにリストを他のコマンドに送信する必要がある場合にシェル スクリプトで必要になることがよくあります。ls

于 2012-12-22T09:52:26.540 に答える
3

(質問が変わったので完全に新規)

これを試して:

cd /Users/KanZ/Desktop/Project/Test
n=1
for f in `ls -tr *.jpg`; do
  mv $f M$n.jpg
  n=$(( n + 1 ))
done
于 2012-12-22T09:53:33.813 に答える
0

-tオプションをlsコマンドに渡す必要があります。この-tオプションは、変更された時刻でソートします。つまり、オペランドを辞書式の順序でソートする前に、最近変更されたものから順にソートします。つまり、最後にダウンロードしたファイルは、次のコマンドを使用して表示できます。

ターミナルを開き、次のコマンドを入力します。

ls -t
于 2016-11-02T16:47:05.433 に答える