首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash脚本列出路径中的所有目录,其中包含转义、charectes和CD,以执行操作

bash脚本列出路径中的所有目录,其中包含转义、charectes和CD,以执行操作
EN

Stack Overflow用户
提问于 2021-09-03 01:22:49
回答 1查看 50关注 0票数 0

我正在尝试编写一个脚本来列出路径中的所有目录。转到每个目录,并将每个目录中的一个.srt文件重命名为同一子目录中的.mp4文件(较少扩展名)。每个子目录都有一个.mp4和一个.srt文件。

作为回报,我得到了这个$ ./change.sh ./change.sh:第2行: Lawless: LawLess (1111)是目录列表中第一个目录的名称。

代码是

代码语言:javascript
复制
#!/bin/bash
yourPathEscaped=$(`find $1 -mindepth 1 -maxdepth 1 -type d | cut -d . -f2 | cut -d \/ -f2 | sed 's/ /\\ /g' | sed 's/,/\\, /g' | sed -e s/\'/\\\\\'/g`)
for dirm in $yourPathEscaped

do
  cd $dirm
  echo $dirm
  for f in `ls *.mp4 | grep -Po '.*(?=\.)'`; do echo $f; mv *.srt $f.srt; ls ; done
  for f in `ls *.mkv | grep -Po '.*(?=\.)'`; do echo $f; mv *.srt $f.srt; ls ; done

cd ..

done
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-03 02:20:40

假设每个目录只有一个.srt文件,这可能会做您想做的事情。使用while + read循环和过程替代

代码语言:javascript
复制
#!/usr/bin/env bash

while IFS= read -rd '' files; do
  directory=${files%/*}
  (
    cd "$directory" || exit
    shopt -s nullglob
    for f in *.mp4 *.mkv; do
      printf '%s\n' "$f"
      file_name=${f%.*}
      echo mv -v -- *.srt "${file_name}.srt"
    done
  )
done < <(
  find "$1" -mindepth 1 -maxdepth 1 -type f \( -name '*.mp4' -o -name '*.mkv' \) -print0
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69038523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档