我最近发现了这种使用以下方法重命名文件的技术zsh:
autoload zmv
zmv '(*).JPG' '$1.jpg'
Run Code Online (Sandbox Code Playgroud)
我也可以写成:
autoload zmv; zmv '(*).JPG' '$1.jpg'
Run Code Online (Sandbox Code Playgroud)
这就像宣传的那样工作,我可以用它来将大写JPG扩展名更改为小写。
但是,我想从我常用的 BASH shell 中将它作为单行运行。当我尝试按如下方式调用它时:
zsh -c "autoload zmv; zmv -f '(*).JPG' '$1.jpg'"
Run Code Online (Sandbox Code Playgroud)
或作为:
echo 'autoload zmv; zmv -f "(*).JPG" "$1.jpg"' | zsh -i
Run Code Online (Sandbox Code Playgroud)
我收到类似以下消息
zmv: error(s) in substitution:
….JPG and ….JPG both map to .jpg
Run Code Online (Sandbox Code Playgroud)
这向我表明,这zsh是不区分大小写的处理文件名,但在第一种方式运行时似乎并非如此。
显然,我不知道我在这里做什么。我还尝试反转单引号和双引号,以防外壳扩展受到阻碍。
如何从 bash 以单行方式运行此命令?
我有大量要重命名的文件。这是我想如何更改文件名的示例:
从:
PD5 grey nice display 1.jpg
Run Code Online (Sandbox Code Playgroud)
到:
pd5-grey-nice-display-showcase-1.jpg
Run Code Online (Sandbox Code Playgroud)
我需要使用的命令行代码是什么?
有没有一种方便的方法来重命名文件(或目录)而不会重复地重复路径或目录更改?
例如 …
mv -some_flag db/migrations/abc_201911201243.php abc_20191101090000.php
Run Code Online (Sandbox Code Playgroud)
...重命名文件而不将其移出该目录。
我看着这个男人页mv,rename而rsync却没有找到任何东西,所以我不知道是否有偶然有一个不明显的把戏做到这一点。
文件名:
_10_-_Overriding_or_customizing_the_rest_end_point-rkkfgI502f0.mp4
_11_-_Expose_ids_in_json_response-CrDXtLfiZos.mp4
_12_-_Create_angular_8_project_using_Angular_CLI-kSXkW1hF0KU.mp4
_13_-_Create_a_model_class_for_Book_entity-Hfm3da1Ze8E.mp4
_14_-_Display_the_list_of_books_in_html_table_with_hard-coded_values-b5R8CsMrOO4.mp4
_15_-_Create_a_new_book-list_component_and_display_the_book_images-Tto3r229fFA.mp4
_16_-_Make_a_HTTP_GET_request_to_the_Spring_boot_application-98RfVQ9Z3ZM.mp4
_17_-_Understanding_the_Observable_and_Observer-NKLirs5SFYk.mp4
_18_-_Call_a_service_method_to_get_the_book_array-yQ34aPdH1_0.mp4
_19_-_Fix_the_error_CORS_policy_and_display_the_data_in_html_table-YSEAdODxMfE.mp4
_1_-_Course_Introduction-b4pjjftApmY.mp4
_20_-_Replace_the_blank_images_with_real_images-fut1f40FHo4.mp4
_2_-_Setup_the_development_environment-RbUGvRAUpSM.mp4
_3_-_Setup_the_MySQL_database-D3krImBhofo.mp4
_4_-_Create_repository_in_Github_and_add_it_to_Eclipse_IDE-MAkVtB_MhzI.mp4
_5_-_Create_spring_boot_project_using_spring_initializer-GsmqGxEv6rg.mp4
_6_-_Configure_application_properties_and_commit_changes_to_github-HqDZKih-Ehk.mp4
_7_-_Create_an_entity_class_for_book_table-pfxt3BeU_e0.mp4
_8_-_Create_an_entity_class_for_book_table-eg1pJJLAzAQ.mp4
_9_-_Create_rest_repositories_for_book_and_category_entity-w7vFTSCWCOM.mp4
Run Code Online (Sandbox Code Playgroud)
如何_从文件名的开头删除单个字符?
这部分是因为我对 BASH 的理解非常浅薄。
这是脚本:
eighteen=(2018*/*)
newe=`echo "$eighteen" | sed -e 's/\(-\)*$//g'`
while read f <&3 && read nf <&4; do
mv -v "${f}" "${nf}"
break
done 3<"$eighteen" 4<"$newe"
Run Code Online (Sandbox Code Playgroud)
我试图弥补我写的糟糕脚本,并删除-多个子文件夹中每个文件名末尾的符号。
和我得到的错误: ./cleanup.sh: line 16: 2018-08-13/untitled-102.arw: No such file or directory
值得注意的是,错误不是来自mv行,而是来自:done 3<"$eighteen" 4<"$newe"。
我从 StackExchange 上的答案中复制了 while 循环。速食,通常是不利于消化的,速食之道——理解,请帮我理解。给我一个关于如何4<"$newe" nf <&4调用前面提到的替换的提示,我应该如何搜索以了解更多信息。它是否应用于while语句上下文之外?
所以我尝试使用这个脚本来摆脱一堆文件中的用户名
#!/bin/bash
ls | while read -r FILE
do
mv -v "$FILE" `echo $FILE | tr '[DarkDream]' '.' `
done
Run Code Online (Sandbox Code Playgroud)
相反,所有包含字母d、a、r、k、e和m 的文件都被替换为a。
有没有办法撤销这个?
我在 Linux 上,我的文件如下所示:
10154-person134_bacteria_640.jpeg
10163-NORMAL2-IM-0141-0001.jpeg
10175-person147_bacteria_707.jpeg
2555-person1_virus_12.jpeg
25562-person132_bacteria_632.jpeg
25566-person143_bacteria_687.jpeg
Run Code Online (Sandbox Code Playgroud)
我需要它们看起来像这样:
10154.jpeg
10163.jpeg
10175.jpeg
2555.jpeg
25562.jpeg
25566.jpeg
Run Code Online (Sandbox Code Playgroud)
我试过 awk,但遇到了问题。
rename ×7
bash ×1
command-line ×1
filenames ×1
files ×1
mv ×1
quoting ×1
shell ×1
shell-script ×1
zsh ×1