
というファイルがあり、35554842200284685106000166550020003504201637715423.xml
名前を次のように変更するだけです42200284685106000166550020003504201637715423.xml
(最後の48文字の前のすべての項目を削除)。この単純な正規表現()は最後の48文字を抽出できますが、Bashでは動作させることは.{48}$
できません。rename
rename
この正規表現を使用して名前を最後の48文字に変更するにはどうすればよいですか?
編集する:
出力rename --help
[root@ip-000-00-0-000 tmp]# rename --help
Usage:
rename [options] <expression> <replacement> <file>...
Rename files.
Options:
-v, --verbose explain what is being done
-s, --symlink act on the target of symlinks
-n, --no-act do not make any changes
-h, --help display this help and exit
-V, --version output version information and exit
For more details see rename(1).
ありがとうございます。
答え1
実際にはこれは必要ありませんrename
。問題を解決できます。
$ file=35554842200284685106000166550020003504201637715423.xml
$ newname=$(sed -E 's/.*(.{48})/\1/'<<<"$file");
$ mv -v "$file" "$newname"
renamed '35554842200284685106000166550020003504201637715423.xml' -> '42200284685106000166550020003504201637715423.xml'
答え2
これはbashのみですポリビニルアルコールパラメータ拡張。
file=35554842200284685106000166550020003504201637715423.xml
外部ツール専用mv
mv -v "$file" "${file:6}"
出力
renamed '35554842200284685106000166550020003504201637715423.xml' -> '42200284685106000166550020003504201637715423.xml'
最後の48文字を保持してください。
mv -v "$file" "${file:(-48)}"
答え3
あなたのものはrename
役に立たないと思いますutil-linux
。
prename
正規表現を使用するには、Perlベースのバリアント(正規表現とも呼ばれます)をインストールする必要があります。それから:
rename -n 's:^\./\d+(?=\d{44}\.xml\Z)::' ./*.xml
(より具体的に説明するために、48文字を44桁の数字に置き換えました.xml
。)
zsh
または、以下を使用することもできますzmv
。
autoload zmv
zmv -n '[0-9]##([0-9](#c44).xml)' '$1'
または
zmv -n '<->.xml~^?(#c48)' '$f[-48,-1]'
(-n
実際にこれを行うには(模擬実行)を削除してください)。
これは競合を防ぐという利点もあります(ターゲット名が同じ2つのファイル)。
を使用すると、bash
次のことができます。
shopt -s extglob nullglob
for f in +([[:digit:]]).xml; do
((${#f) <= 48)) || echo mv -i -- "$f" "${f: -48}"
done
答え4
file=35554842200284685106000166550020003504201637715423.xml
rename "s/"$file"/"${file: -48}"/" *.xml
rename --version
:
/usr/bin/rename using File::Rename version 1.10