使用父目录名称的一部分重命名文件

时间:2019-01-23 21:34:39

标签: bash shell scripting

我有许多名为<div> <input type='text' maxlength="25" id='first-name' placeholder="First Name"> </div> <button type="button" onclick="alert($('#first-name').val())">Click Me! </button> 的目录,其中201801XX_samename_stillsame发生了变化,其余的保持不变。其中包含所有具有相同名称的文件,例如XX。我需要一个filename.png脚本来根据目录名称的可变部分来更改bash,例如

filename.png

4 个答案:

答案 0 :(得分:2)

for dir in 201801*_samename_stillsame/; do
    cp "$dir/filename.png" "${dir:7:2}.png"
done

为每个目录复制文件。 ${dir:7:2}是变量的子字符串,从第7个字符开始即2个字符(即“ XX”部分)。

答案 1 :(得分:2)

for d in $(ls -d 2018*_samename_stillsame); do 
  mv $d/{filename,$(echo "$d" | cut -d '_' -f1)}.png; 
done

编辑:基于@ kamil-cuk的答案,并且因为我没有意识到您只想要         XX部分

for d in $(ls -d 2018*_samename_stillsame); do 
  mv $d/{filename,${d:6:2}}.png; 
done

在我的情况下,测试索引实际上从0开始而不是1,因此要获得第七个字符,您需要在6处进行切片

答案 2 :(得分:1)

您可以使用:

shopt -s nullglob
kn='_samename_stillsame/'

for f in **"$kn"; do
   mv -- "$f/filename.png" "$f${f%%$kn}.png"
done

答案 3 :(得分:1)

查找所有目录名称,使用sed构造一个mv命令,并使用e选项执行构造的命令。

find 201801* -maxdepth 1 -type d | 
   sed -r 's#201801(..)_samename_stillsame#mv &/filename.png &/\1.png#e'