Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Macos 如何删除文件名中的字符(包括第二个下划线)_Macos_Unix_Sed_Rename_File Rename - Fatal编程技术网

Macos 如何删除文件名中的字符(包括第二个下划线)

Macos 如何删除文件名中的字符(包括第二个下划线),macos,unix,sed,rename,file-rename,Macos,Unix,Sed,Rename,File Rename,我在这方面已经找了一段时间了,似乎找不到一个解决方案来解决如何使用sed。我有一个文件名为: 文件_772829345_D594_242_25kd_kljd.mov 我想改名 D594_242_25kd_kljd.mov 我目前正在尝试让sed为此工作,但只能删除文件的第一秒钟: echo 'FILE_772829345_D594_242_25kd_kljd.mov' | sed 's/[^_]*//' _772829345_D594_242_25kd_kljd.mov 如何让sed再次执行相

我在这方面已经找了一段时间了,似乎找不到一个解决方案来解决如何使用sed。我有一个文件名为:

文件_772829345_D594_242_25kd_kljd.mov

我想改名

D594_242_25kd_kljd.mov

我目前正在尝试让sed为此工作,但只能删除文件的第一秒钟:

echo 'FILE_772829345_D594_242_25kd_kljd.mov' | sed 's/[^_]*//'
_772829345_D594_242_25kd_kljd.mov

如何让sed再次执行相同的指令,直到第二个下划线?

如果所有文件的名称都相似,则可以使用
cut
,这比使用正则表达式的
sed
简单得多:

cut -f3- -d_ <<< "FILE_772829345_D594_242_25kd_kljd.mov"

如果所有文件的名称都相似,则可以使用
cut
,这比使用正则表达式的
sed
简单得多:

cut -f3- -d_ <<< "FILE_772829345_D594_242_25kd_kljd.mov"

如果文件名在shell变量中,您甚至不需要使用
sed
,只需使用a来修剪第二个下划线:

filename="FILE_772829345_D594_242_25kd_kljd.mov"
echo "${filename#*_*_}"    # prints "D594_242_25kd_kljd.mov"
顺便说一句,如果要使用
mv
重命名文件,请使用其
-i
选项,以避免在出现任何名称冲突时覆盖文件:

mv -i "$filename" "${filename#*_*_}"

如果文件名在shell变量中,您甚至不需要使用
sed
,只需使用a来修剪第二个下划线:

filename="FILE_772829345_D594_242_25kd_kljd.mov"
echo "${filename#*_*_}"    # prints "D594_242_25kd_kljd.mov"
顺便说一句,如果要使用
mv
重命名文件,请使用其
-i
选项,以避免在出现任何名称冲突时覆盖文件:

mv -i "$filename" "${filename#*_*_}"

sed的/[^]*.[^]*./'
sed的/[^]*.[^]*./'
我使用了这个方法!工作得很好…只需要弄清楚如何允许我的脚本现在接受多个文件
echo“请将您的文件拖到这里:“read filename path=$(dirname“${filename}”)file=$(basename“${filename}”)mv-i“$path/$file”“$path/${file}*.*.*.}”
@DerekEdwards Try
read-a filename;用于“${filenames[@]}”中的文件名;做…
谢谢!成功了。你能解释一下那是怎么回事吗?!不管怎样,我都会研究它。@DerekEdwards
read-a
将输入读取为数组而不是普通变量(其quote/escape/etc解析似乎与Finder编码文件路径的方式相匹配)<代码>用于[单词列表]中的文件名;do迭代“单词”,并将“${filenames[@]}”扩展到filenames`数组的内容,每个元素都被视为一个“单词”。@DerekEdwards顺便说一句,如果这个答案对您有效,请使用这个方法!工作得很好…只需要弄清楚如何允许我的脚本现在接受多个文件
echo“请将您的文件拖到这里:“read filename path=$(dirname“${filename}”)file=$(basename“${filename}”)mv-i“$path/$file”“$path/${file}*.*.*.}”
@DerekEdwards Try
read-a filename;用于“${filenames[@]}”中的文件名;做…
谢谢!成功了。你能解释一下那是怎么回事吗?!不管怎样,我都会研究它。@DerekEdwards
read-a
将输入读取为数组而不是普通变量(其quote/escape/etc解析似乎与Finder编码文件路径的方式相匹配)<代码>用于[单词列表]中的文件名;do迭代“单词”,并且
“${filenames[@]}”扩展到
filenames`数组的内容,每个元素都被视为一个“单词”。@DerekEdwards顺便说一句,如果这个答案对您有效,请