2016-01-21 118 views
-1

我有以下代码,通过在文件夹名称的开始处删除数字来重命名,但我需要的是从最后删除字母和数字的东西。使用bash删除文件夹名称中的后缀

shopt -s extglob 
for f in "[email protected]"; do 
    fpath="${f%/*}" 
    fname="${f##*/}" 
    mv "$f" "$fpath"/"${fname/#+([[:digit:]])_/}" 

Input - 001_AA_0001_AG1_V1_CD 

Output - 001_AA_0001 
+3

所以删除后'_ '什么? – anubhava

+2

是的,您的示例数据不明确。规则是否真的会在第三个'_'字符后删除所有内容?还是删除4位数字后的所有内容?要么 ??你看过你的所有文件夹,这个例子能解决所有的情况吗?考虑更新您的Q以消除有关问题范围的问题。祝你好运。 – shellter

+0

是的,我想在第三个'_'字符后删除任何东西。我正在运行bash脚本作为Automator工作流的一部分。 – magicbeansvfx

回答

0

你真的需要使用猛砸参数扩展? 这里是单行sed解决方案:

sed 's/\([0-9]*_[a-zA-Z]*_[0-9]*\).*/\1/' $filename 

要重命名文件:

mv $filename $(sed 's/\([0-9]*_[a-zA-Z]*_[0-9]*\).*/\1/' $filename) 

注意,这需要你在文件所在的目录中。

FOR的Automator:

for filename in "[email protected]" 
do 
    mv "$filename" $(sed 's/\([0-9]*_[a-zA-Z]*_[0-9]*\).*/\1/' $filename) 
done 
  1. 选择Get Selected Finder Items作为第一步骤。
  2. 然后Run Shell Script
  3. 设置Pass input:as arguments
  4. 将shell脚本,上面
  5. 瞧!
+0

是否可以在Automator内运行?这个动作没有做什么? – magicbeansvfx

+0

它什么都不做,因为它仅仅是一个文本表示。看我的编辑。你的意思是OS X Automator?否则,我不知道你是什么意思的Automator。我不太了解Automator。无论你想做什么,我都很积极,你也可以使用专门的shell脚本来完成。 – hgiesel

+0

谢谢henrikgiesel的回复。是的 - OSX中的Automator。我试图将重命名作为更大工作流的一部分来运行。有什么方法可以告诉SED脚本在选定的内容上运行吗? – magicbeansvfx