1行コマンドで複数のファイルを隠しフォルダにコピーし、名前を変更します。

1行コマンドで複数のファイルを隠しフォルダにコピーし、名前を変更します。

そのため、すべての.pngファイルをアイコンディレクトリにコピーして名前を変更しようとしました。

$ cp /opt/pt/art/{pka.png,pkt.png,pkz.png} ~/.local/icons/{application-x-pka.png,application-x-pkt.png,application-x-pkz.png}

ただし、次の出力エラーが発生します。

cp: target '/home/carl/.local/share/icons/application-x-pkz.png/..' is not a directory

どうすればいいですか?

答え1

cp コマンドは複数の宛先を受け入れません。

$ for a in pka pkt pkz; do
    cp /opt/pt/art/${a}.png ~/.local/icons/application-x-${a}.png
done

答え2

ホームディレクトリでpng、拡張子を含むすべてのファイルを見つけてコピーするには~/backup(フォルダは単なる例です)、次のことを試してください。

cd
find . -regex '.*\(png\)' \! -path './backup/*' -exec echo cp -t backup {} +

そして名前を変更してください

a=1
for i in *.png; do
  new=$(printf "%04d.png" "$a") #04 pad to length of 4
  mv -i -- "$i" "$new"
  let a=a+1
done

関連情報