ソートを使用してファイル名の単語をアルファベット順にソートしますか?

ソートを使用してファイル名の単語をアルファベット順にソートしますか?

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

おすすめ記事