Bashでファイル名を一括変更し、コマンドを使用してsort
ファイルの内容を並べ替える方法のチュートリアルを読むときに、それらを組み合わせる方法がわかりませんでした。
プログラムが実行する方法と同様に、ファイル名のタグを使用して内容がソートされたディレクトリがあります。ラベルスペース仕事をうまく処理してください。ファイルを作成またはダウンロードするときに、ファイル名の末尾に思い出させるタグを追加します。例は次のとおりです。
Sunrise (2) #wallpaper #4k #googleimages.jpg
これで、タグの前後に影響を与えることなく(写真のタイトルやファイル拡張子など)、タグがアルファベット順に並べられるように、これらすべてのファイルを確認して名前を変更したいと思います。したがって、上記は次のようになります。
Sunrise (2) #4k #googleimages #wallpaper.jpg
この目標をどのように達成できますか?ファイルを渡す方法もわかりません。名前をその内容の代わりに次のコマンドに変換し、sort
その出力をmv
。
ベストアンサー1
#!/bin/bash
for i in dir_for_files/*; do
filename=${i%%#*}
sorted_tags=$(grep -o "#[^ .]*" <<< "$i" | sort -n | tr '\n' ' ')
ext=${i#*.}
echo mv "$i" "${filename}${sorted_tags% }.$ext"
done
テスト:
##### Before sorting #####
$ ls -1 dir_for_files
Note (3) #textfile #notes #important.txt
Sunrise (2) #wallpaper #4k #googleimages.jpg
Sunset (2) #wallpaper #2k #images.jpg
$ ./sort_tags.sh
##### After sorting #####
$ ls -1 dir_for_files
Note (3) #important #notes #textfile.txt
Sunrise (2) #4k #googleimages #wallpaper.jpg
Sunset (2) #2k #images #wallpaper.jpg