Shell/Bash中是否有一個快捷方式可以根據正則表達式或其他條件重命名文件夾中的所有文件。我找的這裏是我的文件夾中的文件,已經讓我們說有以下命名約定100個的文本文件:Shell/Bash快捷方式批量重命名文件夾中的文件
<longdocumentidentifier>-doc-<counter>.txt.
我需要重命名所有與上面給出的約定,只是將文件:
doc-<counter>.txt
有沒有一種方法可以幫助我解決上述問題?
Shell/Bash中是否有一個快捷方式可以根據正則表達式或其他條件重命名文件夾中的所有文件。我找的這裏是我的文件夾中的文件,已經讓我們說有以下命名約定100個的文本文件:Shell/Bash快捷方式批量重命名文件夾中的文件
<longdocumentidentifier>-doc-<counter>.txt.
我需要重命名所有與上面給出的約定,只是將文件:
doc-<counter>.txt
有沒有一種方法可以幫助我解決上述問題?
我建議是這樣的:
for i in *-doc-*.txt; do mv $i ${i/*-doc-/doc-}; done
${i/*-doc-/doc-}
用doc-
代替第一次出現*-doc-
。
如果您需要做多個替換(請參閱註釋編號1),則需要使用${var//Pattern/Replacement}
變體。如果您需要替換名稱的開頭,則需要使用,如果需要替換結尾(即:擴展名),則需要使用${var/%Pattern/Replacement}
表單。
更多細節
內置在大多數linux中的重命名命令,例如,將很容易地做到這一點。
就個人而言,我更喜歡正則表達式太這就是爲什麼我一直在圍繞這個腳本攜帶一個非常非常非常長的時間(讀:80年代末期以來或90年代初):
#!/usr/bin/perl
($op = shift) || die "Usage: $0 expr [files]]\n";
if([email protected])
{
@ARGV = <STDIN>;
chop(@ARGV);
}
for (@ARGV)
{
$was = $_;
eval $op;
die [email protected] if [email protected];
if ($was ne $_)
{
print "rename($was,$_)\n";
rename($was,$_);
}
}
,當安裝可以讓你做這樣的事情:
script-name 's/.*-doc(.*).txt/doc$1.txt/' *.txt
有prename
見http://tldp.org/LDP/abs/html/parameter-substitution.html#EXPREPL1,允許你使用正則表達式:
prename 's/^.*-doc-(.*\.txt)$/doc-$1/' *.txt
使用該選項-n
模擬:
prename -n 's/^.*-doc-(.*\.txt)$/doc-$1/' *.txt
注:這在許多Linux發行版中以rename
的形式發貨,但不是所有的 - 所以我使用Perl自帶的實用程序的規範名稱。
downvoter:care to comment? – elias
如果你有rename
那麼,rename 's/^.*-doc-/doc-/' *.txt
應該做的伎倆。
mmv "*-doc-*" "doc-#2"
MMV命令代表「大衆搬家」
如果你想遞歸到子目錄,還有:
find . -maxdepth N -type f -name "$pattern" | sed -e 'p' -E -e "s/$str1/$str2/g" | xargs -n2 mv
在系統,可自動支持擴展的正則表達式,你可以離開-E
。
優點:
缺點:
(回答來自here修訂)
找到。 -name'* scss'| xargs -L1 -I {} echo {} {} | sed's/css.scss $/scss /'| xargs的-L1 MV
例如,如果你有一堆與「.css.scss」結尾的文件,你想重新命名他們只是「.scss」結束(即刪除的CSS部分)
調整正則表達式並找到您需要的參數
這對稍微不同的情況有幫助;我想用一些破折號替換一些文件名中的所有空格:'for in in *;做mv「$我」$ {我// \/- }; done'。請注意,爲了這個工作,我不得不引用原始文件名稱。 –
我用它從所有腳本名稱中刪除了.sh :-)'for i in * .sh;做mv $ i $ {i/.sh /}; done'。 – erm3nda
@ erm3nda注意:'$ {i/.sh /}'會刪除.sh字符串的第一個匹配項。爲了確保你刪除了擴展名(我假設你想要的),你應該使用'$ {i /%。sh /}' – Sorin