ここ数年で最後に変更されたファイルを含む大きなディレクトリがあります。サブディレクトリを生成するインタラクティブbashシェルに一度入力できる簡単なコマンドはありますか?それぞれ4桁の年に名前が付けられ、その中の情報が信頼できない場合は、そのファイルを次の場所に移動します。ファイルの年齢に関連するファイル名を持つ各サブディレクトリを確認し、最後に私が実行しているすべてが正しく機能し、ファイルやデータが失われていないことを確認しますか?
たとえば、次のような完全に間違った例があります。
$ cd ~/Documents
$ ls -lhrt
...
-rw-r--r-- 4 user user 4.0K Jun 29 2017 oldfile.txt
-rw-r--r-- 4 user user 4.0K May 15 2018 2018file.md
-rw-r--r-- 4 user user 4.0K Apr 14 2019 04.dat
-rw-r--r-- 4 user user 4.0K Jul 21 2019 somepage.html
drw-r--r-- 4 user user 4.0K Jul 21 2019 somepage_files
-rw-r--r-- 4 user user 4.0K Mar 13 2020 march.dat
-rw-r--r-- 4 user user 4.0K Feb 12 18:03 file02.dat
-rw-r--r-- 4 user user 4.0K Oct 11 18:03 OctReport.txt
完了したら、次の結果を得たいと思います。
$ cd ~/Documents
$ find .
.
./2017
./2017/oldfile.txt
./2018
./2018/2018file.md
./2019
./2019/04.dat
./2019/somepage.html
./2019/somepage_files
./2019/somepage_files/...
./2020
./2020/march.dat
./2021
./2021/file02.dat
./2021/OctReport.txt
ベストアンサー1
for
ループを使用してディレクトリを作成して、date
各ファイルの変更年を取得できます(ここではGNUまたはそのdate
オプションが互換性があると仮定します)。-r
これにより、各ファイルがそのディレクトリに移動されます。
for file in *; do
[ ! -L "$file" ] &&
dir_name=$(date -r "$file" +%Y) &&
mkdir -p "$dir_name" &&
mv -- "$file" "$dir_name"
done