[英]bash script to rename following a pattern in subdirectories and make a copy
我正在嘗試對所有目錄中的某些文件進行迭代重命名。
homefolder/folder1/ouput/XXXXX_ab.png
homefolder/folder1/ouput/XXXXX_abcdefg.png
homefolder/folder2/ouput/XXXXX_ab.png
homefolder/folder2/ouput/XXXXX_abcdefg.png
homefolder/folder3/ouput/XXXXX_ab.png
homefolder/folder3/ouput/XXXXX_abcdefg.png
...
homefolder/folder500/ouput/XXXXX_ab.png
homefolder/folder500/ouput/XXXXX_abcdefg.png
我想獲取文件夾名稱(例如folder1 , folder2 ,... folder500 ),並將其作為前綴傳遞給兩個png文件,並刪除每個文件開頭的那五個X。 這些png文件的模式為:
XXXXX_ab.png
XXXXX_abcdrfg.png
因此,每個子目錄中只有前五個字符是不同的,它們將被其父目錄的名稱(即文件夾名稱)替換。
結果將是:
homefolder/folder1/ouput/folder1_ab.png
homefolder/folder1/ouput/folder1_abcdefg.png
homefolder/folder2/ouput/folder2_ab.png
homefolder/folder2/ouput/folder2_abcdefg.png
homefolder/folder3/ouput/folder3_ab.png
homefolder/folder3/ouput/folder3_abcdefg.png
...
homefolder/folder500/ouput/folder500_ab.png
homefolder/folder500/ouput/folder500_abcdefg.png
重命名結束后,在homefolder的另一個文件夾(例如all_png_folder)中創建這兩個新重命名的文件的副本。
find . -iname "*_ab.png" -exec rename _ab.png folder1_ab.png '{}' \;
find . -name "*_ab.png" -exec cp {} ./all_png_folder \;
這是一個開始,結尾處的復制應該是一件瑣碎的事情。
#!/usr/bin/env bash
files=$(find . -type f -name "*_ab.png" -or -name "*_abcdefg.png")
for file in $files; do
foldername=$(cut -d '/' -f 2 <<< $file)
# The name of the png-file minus the leading xxxxxx
pngfile=$(basename "$file" | cut -d '_' -f 2)
destinationdir=$(dirname "$file")
mv $file "$destinationdir/$foldername"'_'"$pngfile"
done
$ tree
.
├── folder1
│ └── ouput
│ ├── foo_bar.png
│ ├── xxxxx_abcdefg.png
│ └── xxxxx_ab.png
├── folder2
│ └── ouput
│ ├── xxxxx_abcdefg.png
│ └── xxxxx_ab.png
└── rename.sh
4 directories, 6 files
$ ./rename.sh
$ tree
.
├── folder1
│ └── ouput
│ ├── folder1_abcdefg.png
│ ├── folder1_ab.png
│ └── foo_bar.png
├── folder2
│ └── ouput
│ ├── folder2_abcdefg.png
│ └── folder2_ab.png
└── rename.sh
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.