为什么 cut 不匹配任何定界符?

Why is cut not matching any delimiters?

以下无法正常工作,cut 没有在点处分隔,但 {} 肯定在文件名中包含一个点。 find . -type f -exec echo ffmpeg -i {} -vcodec copy -acodec copy $(echo {} | cut -d "." -s -f 1).mp4 \;

Bash 在命令 运行 之前执行命令替换,你有 放入单引号工作。您想要 运行 的命令是 足够复杂,可以用 sh 的单独实例调用它,如下所示:

find . -type f -exec sh -c 'echo ffmpeg -i "" -vcodec copy -acodec copy $(echo "" | sed "s,^\./,," | cut -d "." -s -f 1).mp4' sh {} \;

例如,如果您要 运行 命令所在的目录 看起来像这样:

$ tree
.
├── dir
│   └── file_something.avi
├── file_a.avi
├── file_b.avi
├── file_c.avi
└── find.sh

1 directory, 5 files

会 return:

ffmpeg -i ./file_c.avi -vcodec copy -acodec copy file_c.mp4
ffmpeg -i ./find.sh -vcodec copy -acodec copy find.mp4
ffmpeg -i ./file_b.avi -vcodec copy -acodec copy file_b.mp4
ffmpeg -i ./file_a.avi -vcodec copy -acodec copy file_a.mp4
ffmpeg -i ./dir/file_something.avi -vcodec copy -acodec copy dir/file_something.mp4