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