ファイル名に基づいて他のファイルにファイルをコピーできるコマンドはLinuxにありますか? [閉鎖]

ファイル名に基づいて他のファイルにファイルをコピーできるコマンドはLinuxにありますか? [閉鎖]

a_b_c_d.jpg、、、、などのファイルにコピーして各ファイルが元のコピーになるようにするLinuxコマンドはありますか?a.jpgb.jpgc.jpgd.jpg

元の名前から名前を抽出し、最初に区切り、最初に_終わる必要があります.

ベストアンサー1

#!/bin/sh

for name in *_*.jpg; do
    # Only care about regular files
    [ ! -f "$name" ] && continue

    # Do the following in a subshell to avoid affecting the original 
    # environment with "set -f" and setting IFS
    (
        set -f    # Turn off filename globbing (allows filename to contain e.g. *)
        IFS='_'   # Split unquoted strings on "_" only

        # Split the filename into parts (remove trailing ".jpg" first), and then
        # iterate over the parts, creating the symbolic links
        for part in ${name%.jpg}; do
            ln -s -- "$name" "$part.jpg"

            # To do copying instead, use:
            # cp -i -- "$name" "$part.jpg"
        done
    )
done

.jpgスクリプトには、1つ以上の下線が含まれ、現在のディレクトリで終わるすべてのファイル名を繰り返します。これらの名前ごとに、名前をアンダースコアに分割して作成します。シンボリックリンク名前部分を分割(.jpgファイル名のサフィックスを追加)して、元のファイル(コピーではありません)にします。

私は元のファイルの実際のコピーではなくシンボリックリンクを作成することにしました。本当にコピーしたい場合は、スクリプトコメントでそのコードを見つけることができます。

両方のファイルが含まれているディレクトリで実行すると、次のようにa_b_c_d.jpgなります。ABBA_hello there_misc.jpg

.
|-- ABBA.jpg -> ABBA_hello there_misc.jpg
|-- ABBA_hello there_misc.jpg
|-- a.jpg -> a_b_c_d.jpg
|-- a_b_c_d.jpg
|-- b.jpg -> a_b_c_d.jpg
|-- c.jpg -> a_b_c_d.jpg
|-- d.jpg -> a_b_c_d.jpg
|-- hello there.jpg -> ABBA_hello there_misc.jpg
`-- misc.jpg -> ABBA_hello there_misc.jpg

おすすめ記事