a_b_c_d.jpg
、、、、などのファイルにコピーして各ファイルが元のコピーになるようにするLinuxコマンドはありますか?a.jpg
b.jpg
c.jpg
d.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