簡體   English   中英

用於批量重命名文件夾中文件的 Shell/Bash 快捷方式

[英]Shell/Bash shortcut for bulk renaming of files in a folder

Shell/Bash 中是否有快捷方式可以根據正則表達式或其他一些條件重命名文件夾中的所有文件。 我在這里尋找的是在我的文件夾文檔中,假設有 100 個具有以下命名約定的文本文件:

<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} ,如果您需要替換結尾(即:擴展名),您需要使用${var/%Pattern/Replacement}表格。

有關更多詳細信息,請參閱外殼參數擴展 此擴展是特定於 bash 的。

如果您renamerename 's/^.*-doc-/doc-/' *.txt應該可以解決問題。

prename ,它允許您使用正則表達式:

prename 's/^.*-doc-(.*\.txt)$/doc-$1/'  *.txt

使用選項-n來模擬:

prename -n 's/^.*-doc-(.*\.txt)$/doc-$1/'  *.txt

注意:這是在許多 Linux 發行版中作為rename提供的,但並非在所有發行版中都如此——所以我使用 Perl 附帶的實用程序的規范名稱。

如果你想遞歸到子目錄,還有:

find . -maxdepth N -type f -name "$pattern" | sed -e 'p' -E -e "s/$str1/$str2/g" | xargs -n2 mv

在自動支持擴展正則表達式的系統上,您可以省略-E

好處:

  • 遞歸到子目錄
  • 您可以控制遞歸的最大深度
  • 您可以重命名文件和/或目錄(-type f|d)

缺點:

  • 稍微復雜一點的正則表達式,因為你必須去掉路徑才能得到文件名

(答案從這里修改)

例如,大多數 linux 內置的 rename 命令將很容易做到這一點。

就我個人而言,我也更喜歡正則表達式,這就是為什么我一直在使用這個腳本很長一段時間(閱讀:自 80 年代末或 90 年代初以來):

#!/usr/bin/perl

($op = shift) || die "Usage: $0 expr [files]]\n";

if(!@ARGV)
  {
  @ARGV = <STDIN>;
  chop(@ARGV);
  }

for (@ARGV)
  {
  $was = $_;
  eval $op;
  die $@ if $@;

  if ($was ne $_)
    {
    print "rename($was,$_)\n";
    rename($was,$_);
    }
  }

安裝后,您可以執行以下操作:

script-name 's/.*-doc(.*).txt/doc$1.txt/' *.txt
mmv "*-doc-*" "doc-#2"

mmv 命令代表“大規模移動”

如果您不介意外部工具,那么這里有一個: rnm ( web page )

對於您的特定問題,命令將是:

rnm -rs '/.*-doc-/doc-/' *.txt

或者

rnm -rs '/.*-(doc-.*\.txt)/\1/' *.txt

您可以 在此處找到更多示例/文檔。

找 。 -name '*scss' | xargs -L1 -I {} echo {} {} | sed 's/css.scss$/scss/' | xargs -L1 mv

例如,如果您有一堆以“.css.scss”結尾的文件,並且您想將它們重命名為僅以“.scss”結尾(即刪除 .css 部分)

調整正則表達式並找到滿足您需求的參數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM