递归地为所有文件添加文件扩展名

发布于 2024-07-26 09:45:45 字数 124 浏览 2 评论 0原文

我有一些目录和子目录,其中包含没有文件扩展名的文件。 我想将 .jpg 添加到这些目录中包含的所有文件中。 我见过用于更改文件扩展名的 bash 脚本,但不只是添加一个。 它还需要递归,有人可以帮忙吗?

I have a few directories and sub-directories containing files with no file extension. I want to add .jpg to all the files contained within these directories. I've seen bash scripts for changing the file extension but not for just adding one. It also needs to be recursive, can someone help please?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

时光病人 2024-08-02 09:45:45

没有显式循环的替代命令(man find):

find . -type f -exec mv '{}' '{}'.jpg \;

解释:这会递归地查找从当前目录 (.) 开始的所有文件 (-type f) 并应用移动命令 (mv) 到他们每个人。 另请注意 {} 周围的引号,以便正确处理带有空格(甚至换行符...)的文件名。

Alternative command without an explicit loop (man find):

find . -type f -exec mv '{}' '{}'.jpg \;

Explanation: this recursively finds all files (-type f) starting from the current directory (.) and applies the move command (mv) to each of them. Note also the quotes around {}, so that filenames with spaces (and even newlines...) are properly handled.

星光不落少年眉 2024-08-02 09:45:45

这将找到没有扩展名的文件并添加您的 .jpg

find /path -type f -not -name "*.*" -exec mv "{}" "{}".jpg \;

this will find files without extension and add your .jpg

find /path -type f -not -name "*.*" -exec mv "{}" "{}".jpg \;
迟到的我 2024-08-02 09:45:45

这有点晚了,但我想我应该补充一个比迄今为止更好的解决方案(尽管可读性可能较差):

find /path -type f -not -name "*.*" -print0 | xargs -0 rename 's/(.)$/$1.jpg/'

使用 find | xargs 模式通常会导致更高效的执行,因为您不必为每个文件创建一个新进程。

请注意,这需要 Debian 风格的发行版中的 rename 版本(又名 prename),而不是传统的 rename。 不过,这只是一个很小的 ​​Perl 脚本,因此在任何系统上使用上面的命令都很容易。

This is a little late, but I thought I would add that a better solution (although maybe less readable) than the ones so far might be:

find /path -type f -not -name "*.*" -print0 | xargs -0 rename 's/(.)$/$1.jpg/'

Using the find | xargs pattern generally results in more efficient execution, as you don't have to fork a new process for each file.

Note that this requires the version of rename found in Debian-flavored distros (aka prename), rather than the traditional rename. It's just a tiny perl script, though, so it would be easy enough to use the command above on any system.

断桥再见 2024-08-02 09:45:45

像这样,

for f in $(find . -type f); do mv $f ${f}.jpg; done

我不希望你有空格分隔的文件名,
如果这样做,则需要对名称进行一些处理。

如果您想从其他目录执行命令,
您可以将 find . 替换为 find /target/directory

like this,

for f in $(find . -type f); do mv $f ${f}.jpg; done

I am not expecting you have space separated file names,
If you do, the names will need to be processed a bit.

If you want to execute the command from some other directory,
you can replace the find . with find /target/directory.

雨夜星沙 2024-08-02 09:45:45

要在 Windows basic 中重命名所有没有扩展名的文件,您可以执行 ren * *.jpg
由于文件没有扩展名,只需使用 *,或者如果您想将 png 更改为 jpg
使用 ren *.png *.jpg

For renaming all files with no extension in Windows basic you can do ren * *.jpg
Since the file as no extension, just use the *, or if you want to change png to jpg
use ren *.png *.jpg

乞讨 2024-08-02 09:45:45

rename

不确定它是否可以重命名没有扩展名的文件(我现在使用的是 Windows 7)

rename

not sure that it can rename files without extensions (I'm on windows 7 right now)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文