複数のファイルのベースアドレス(拡張子ではない)の最後の10文字を変更します。

複数のファイルのベースアドレス(拡張子ではない)の最後の10文字を変更します。

長さは異なりますが、拡張子は同じファイルが多く、すべてのファイルの名前を一度に変更するために多くのコマンドを試しました。

すべてのファイル名の最後の10文字だけを変更できますか?最後の10文字は常に同じです。

たとえば、

img(12345678).txt
test(12345678).txt 
download(12345678).txt
upload(12345678).txt

(12345678)私はに交換したいabcdefghij

答え1

renameディストリビューションには通常、2 つの Linux コマンドが使用されます。私はより強力なので、Perlベースの名前変更を好む。使用しているものを確認できます$ prename --version

Perlベースの名前変更がある場合

$ rename --version
perl-rename 1.9
$ rename 's/\(12345678\)/abcdefghij/' *.txt

-n最初にテスト実行として確認するには、このフラグを使用してください。

別の名前に変更した場合

$ rename --version
rename from util-linux 2.26.2
$ rename '(12345678)' abcdefghij *.txt

.txt通常、前の最後の10文字を削除します。

文字が常に同じでない場合は、通常の場合に使用できます。

Perlベースの名前変更の場合

rename 's/.{10}\.txt\Z/abcdefghij.txt/' *.txt -n

他の名前変更の場合は、可能かどうかはわかりません。

答え2

この試み。推奨処置に満足している場合は、削除してもう一度echo実行してください。

$ ls
download(12345678).txt  img(12345678).txt  upload(12345678).txt
$ for F in *; do echo mv "$F" "${F/(12345678)/abcdefghij}"; done
mv download(12345678).txt downloadabcdefghij.txt
mv img(12345678).txt imgabcdefghij.txt
mv upload(12345678).txt uploadabcdefghij.txt
$

答え3

bash//インストールされていないユーティリティに戻すことなくdashこれを行うだけです。zsh存在するbash

for x in *"(12345678).txt"; do mv "$x" "${x%(12345678).txt}"abcdefghij.txt; done

マッチを削除するのに$x%pattern十分です。From man bash:

   ${parameter%word}
   ${parameter%%word}
          Remove matching suffix pattern.  The word is expanded to produce
          a pattern just as in pathname expansion.  If the pattern matches
          a  trailing portion of the expanded value of parameter, then the
          result of the expansion is the expanded value of parameter  with
          the  shortest  matching  pattern (the ``%'' case) or the longest
          matching pattern (the ``%%'' case) deleted.  If parameter  is  @
          or  *,  the  pattern  removal operation is applied to each posi‐
          tional parameter in turn, and the  expansion  is  the  resultant
          list.   If  parameter is an array variable subscripted with @ or
          *, the pattern removal operation is applied to  each  member  of
          the array in turn, and the expansion is the resultant list.

答え4

努力する

 ls |  awk '{printf "mv %s %s\n",$0,gsub("(12345678)","abcedfgh" );}' | bash

関連情報