Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在第一次出现字符之前重命名文件名_Bash_Filenames - Fatal编程技术网

Bash 在第一次出现字符之前重命名文件名

Bash 在第一次出现字符之前重命名文件名,bash,filenames,Bash,Filenames,我试图使用bash脚本或仅在命令行中重命名一批文件,但似乎找不到任何关于如何在字符首次出现之前删除字符的信息 现在,我的文件名为: author1_-_year_-_title_name.txt author2_-_year_-_title_name.txt 我希望他们看起来像 _-_year_-_title_name.text 甚至 year_-_title_name.text 我在命令行中尝试了sed: sed 's/^[^_-_]* _-_ //' * 但这只是试图编辑文本文件,而

我试图使用bash脚本或仅在命令行中重命名一批文件,但似乎找不到任何关于如何在字符首次出现之前删除字符的信息

现在,我的文件名为:

author1_-_year_-_title_name.txt
author2_-_year_-_title_name.txt
我希望他们看起来像

_-_year_-_title_name.text
甚至

year_-_title_name.text
我在命令行中尝试了sed:

sed 's/^[^_-_]* _-_ //' *

但这只是试图编辑文本文件,而不是文件名

您不能使用sed更改文件名。请尝试以下简单循环:

for fp in ./*_-_*; do
  echo mv "$fp" "${fp#*_-_}"
done
如果输出看起来不错,请删除echo。

请尝试按如下方式重命名命令

rename -n s/[^-]*-_//  *.txt
rename(author1_-_year_-_title_name.txt, year_-_title_name.txt)
rename(author2_-_year_-_title_name.txt, year_-_title_name.txt)
输出如下

rename -n s/[^-]*-_//  *.txt
rename(author1_-_year_-_title_name.txt, year_-_title_name.txt)
rename(author2_-_year_-_title_name.txt, year_-_title_name.txt)

一旦您对上述结果感到满意,它将仅在终端上打印上述命令中的remove-n选项,并应重命名文件。

您可以使用shell内置字符串操作来完成此操作:old='author1'\uuu-year'\uu-title'\u-name.txt';新=${old*.-\};echo$new