1つの手順で別のディレクトリからファイル名をコピーしてプレフィックスを追加するには?

1つの手順で別のディレクトリからファイル名をコピーしてプレフィックスを追加するには?

あるディレクトリから別のディレクトリに複数のファイルをコピーして名前を変更したいと思います。特に、私は次のようなものが欲しい:

/tmp/tmp.XXX/aaa.original.txt
/tmp/tmp.XXX/bb5.original.txt
/tmp/tmp.XXX/x2x.original.txt

にコピー

/root/hello/dump-aaa.txt
/root/hello/dump-bb5.txt
/root/hello/dump-x2x.txt

似たようなことを試しましたが、うまくいきません。

  • cp /tmp/tmp.XXX/*.original.txt /root/hello/*.txt
  • find /tmp/tmp.XXX/ -name '*.original.txt' | xargs -i cp /root/hello/dump-{}.txt
  • for f in /tmp/tmp.XXX/*.original.txt; do cp -- "$f" "/root/hello/dump-$f.txt"; done

通常、上記のコードの結果は次のとおりです。間違い:

cp: cannot create regular file '/root/hello/dump-/tmp/tmp.XXX/aaa.original.txt.txt': No such file or directory

答え1

bash解決策:

for f in /tmp/tmp.XXX/*.original.txt; do 
    bn="${f##*/}"   # extracting file basename
    cp "$f" "/root/hello/dump-${bn%%.*}.txt"
done

関連情報