簡體   English   中英

Bash腳本根據父目錄重命名文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM