如果目标目录已存在同名文件怎么办?
时间: 2024-10-23 15:18:52 浏览: 17
如果目标目录已经存在同名文件,FFmpeg默认不会覆盖原有文件。为了避免意外覆盖,你可以通过添加一些选项来指定处理策略,例如:
- **添加时间戳**:可以在文件名后加上当前时间作为后缀,如`input.mp4_202305271456.mp3`。FFmpeg有个选项`-f`可以配合`-auto木材`(自动重命名)一起使用。
```sh
ffmpeg -i input.mp4 -vn -acodec libmp3lame -ab 192k input.mp4_%Y%m%d%H%M.mp3
```
- **使用其他文件名规则**:你可以自定义文件名规则,比如"原始文件名_副本数.mp3",FFmpeg允许使用正则表达式,例如`-metadata title="%(originalfilename)s (backup %b)"`。
```sh
ffmpeg -i input.mp4 -vn -acodec libmp3lame -ab 192k -metadata "title='$(basename "${input.mp4%.*}_$(basename "$input.mp4"|sed 's/\(.*\)\(\([0-9]\+\)\).*/\2/'')'" output.mp3
```
- **先删除现有文件**:如果你想直接替换,可以先确认目标文件不存在,或者在转换前手动删除。但是注意操作前备份重要文件以防丢失。
请根据你的实际需求选择合适的策略。
相关问题
python实现 mv 移动文件时,目标路径下已存在同名文件不覆盖同名目标文件
在 Python 中,可以使用 shutil 库的 move 函数来实现文件移动。如果目标路径下已存在同名文件,可以使用 os.path.exists 函数来判断是否存在同名文件,如果存在则可以在文件名后面添加一个时间戳或者随机数,避免覆盖同名目标文件。
以下是一个示例代码:
```python
import shutil
import os
import time
def move_file(src_path, dst_path):
filename = os.path.basename(src_path)
dst_file_path = os.path.join(dst_path, filename)
if os.path.exists(dst_file_path):
timestamp = time.strftime('%Y%m%d%H%M%S', time.localtime())
name, ext = os.path.splitext(filename)
dst_file_path = os.path.join(dst_path, '{}_{}{}'.format(name, timestamp, ext))
shutil.move(src_path, dst_file_path)
```
在上面的代码中,首先通过 os.path.basename 函数获取源文件名,然后通过 os.path.join 函数拼接目标文件路径。接着使用 os.path.exists 函数判断是否存在同名文件,如果存在则在文件名后面添加一个时间戳,并重新拼接目标文件路径。最后使用 shutil.move 函数将文件移动到目标路径下。
mv 移动文件时,目标路径下已存在同名文件如何处理
如果目标路径下已存在同名文件,mv 命令会将源文件覆盖掉同名的目标文件。如果你想保留目标文件,可以使用 -i 选项,这会在目标文件已经存在时询问是否覆盖。例如:
```
mv -i source_file.txt destination_folder/
```
如果你想将源文件重命名后再移动到目标路径下,可以给 mv 命令指定一个新的文件名,例如:
```
mv source_file.txt destination_folder/new_filename.txt
```
这会将源文件重命名为 new_filename.txt 并移动到目标路径下。
阅读全文