为什么 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
以下无法正常工作,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