Macos 如何删除文件名中的字符(包括第二个下划线)
我在这方面已经找了一段时间了,似乎找不到一个解决方案来解决如何使用sed。我有一个文件名为: 文件_772829345_D594_242_25kd_kljd.mov 我想改名 D594_242_25kd_kljd.mov 我目前正在尝试让sed为此工作,但只能删除文件的第一秒钟: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再次执行相
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 Tryread-a filename;用于“${filenames[@]}”中的文件名;做…
谢谢!成功了。你能解释一下那是怎么回事吗?!不管怎样,我都会研究它。@DerekEdwardsread-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 Tryread-a filename;用于“${filenames[@]}”中的文件名;做…
谢谢!成功了。你能解释一下那是怎么回事吗?!不管怎样,我都会研究它。@DerekEdwardsread-a
将输入读取为数组而不是普通变量(其quote/escape/etc解析似乎与Finder编码文件路径的方式相匹配)<代码>用于[单词列表]中的文件名;do迭代“单词”,并且“${filenames[@]}”扩展到
filenames`数组的内容,每个元素都被视为一个“单词”。@DerekEdwards顺便说一句,如果这个答案对您有效,请