![出力の特定の部分を選択し、それを使用してファイルの名前を変更します。](https://rvso.com/image/1497067/%E5%87%BA%E5%8A%9B%E3%81%AE%E7%89%B9%E5%AE%9A%E3%81%AE%E9%83%A8%E5%88%86%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%97%E3%80%81%E3%81%9D%E3%82%8C%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%90%8D%E5%89%8D%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%97%E3%81%BE%E3%81%99%E3%80%82.png)
現在、壊れたファイルシステムから回復したファイルを整理しています。それらのファイル名はすべて、次のようなものになっています: f123123123.xls
ファイル「f123123123.xls」を実行すると、多くの情報が表示され、場合によっては最終保存日も表示されます。
例:
./recup_dir.89/f111841280.xls: 複合ドキュメント ファイル V2 ドキュメント、リトル エンディアン、OS: Windows、バージョン 1.0、コード ページ: -535、リビジョン番号: 5、合計編集時間: 09:58:37、最終印刷: Wed Sep 9 11:57:04 2015、作成時間/日付: Thu Sep 3 03:15:36 2015、最終保存時間/日付: Mon Oct 19 14:28:03 2015
最後に保存した日付を選択し、それを使用してファイル名を Oct-19-2015.xls のように変更するにはどうすればよいですか?
答え1
それには、いくつかのコマンドを連結します。この例では、名前を変更したファイルを別のディレクトリに書き込みます。これらのファイルは好きな場所に移動できますが、個人的には、いくつかの誤った開始があった場合に備えて、ファイルを別々に保持することを好みます。
mkdir renamed
for recovered in recup_dir.89/*xls; do
new_name=$(date +'%b-%d-%Y' -d "$(file "$recovered"| grep -Po 'Last Saved Time/Date:\K[^,]*')")
if [ -n "$new_name" ]; then
mv "$recovered" "renamed/$new_name.xls"
fi
done
これは、ディレクトリ内のすべての xls ファイルをループします (この情報はすべてのファイルの出力には含まれないため)。各ファイルに対してコマンドを実行しfile
、GNU grep の Perl スタイルの正規表現を使用して、が出現する場所を検索しLast Saved Time/Date:
、その後の時間を取得します。次に、date
コマンドを使用して、その時間を希望どおりに再フォーマットします。そのため、出力内の個々のフィールドをあまり操作する必要はありません。
これにより、フォーマットの日付が取得されOct-19-2015
、予想どおり、その値がコマンドで使用されますmv
が、実際に日付が返された場合のみです。何も返されなかった場合、ファイルの名前を変更しないでください (以前の一連のコマンドで常に正しく機能するとは限らない場合に備えて)。