![](/img/trans.png)
[英]How to rename file based on parent and child folder name in bash script
[英]Bash script to rename file based on parent directory
這是一個片段,旨在查找文件,並根據其父目錄的名稱對其進行重命名。
我正在嘗試使此腳本遞歸工作,但是使用了從其啟動目錄,而不是結果的位置(即使使用了execdir)。
find . -name "*.txt" -exec -execdir mv {} ${PWD##*/}.txt \;
有沒有辦法修改${PWD##*/}
位以確認execdir命令並從文件位置目錄中執行操作?
請注意,這是我的嘗試,如果文件夾中有空格,反斜杠或文件名,則此方法將無效。
#!/bin/bash
arr=($(echo "$(find . -type d)"))
for dir in ${arr[@]}; do
files=($dir/*);
dirname=$(basename $dir);
echo $dirname; # For testing
for f in ${files[@]}; do
if [ -f $f ]; then
fbase=$(basename $f)
fbase="$dirname""_""$fbase"
echo "mv $f $dir/$fbase;" # For testing
mv $f $dir/$fbase; # For real.
fi
done
done
這是標准輸出的輸出:
B
mv ./B/file1 ./B/B_file1;
mv ./B/file2 ./B/B_file2;
mv ./B/file3 ./B/B_file3;
mv ./B/file4 ./B/B_file4;
mv ./B/file5 ./B/B_file5;
mv ./B/file6 ./B/B_file6;
A
mv ./A/file1 ./A/A_file1;
mv ./A/file2 ./A/A_file2;
mv ./A/file3 ./A/A_file3;
mv ./A/file4 ./A/A_file4;
mv ./A/file5 ./A/A_file5;
mv ./A/file6 ./A/A_file6;
C
mv ./A/C/file1 ./A/C/C_file1;
mv ./A/C/file2 ./A/C/C_file2;
mv ./A/C/file3 ./A/C/C_file3;
mv ./A/C/file4 ./A/C/C_file4;
mv ./A/C/file5 ./A/C/C_file5;
mv ./A/C/file6 ./A/C/C_file6;
我不知道這是否可以解決您的問題,但我想這是總的方向。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.