簡體   English   中英

如何替換bash中的文件夾和文件名?

[英]How to replace folder and file names in bash?

我有很多帶有空格和大寫字母的文件夾,以及帶有空格和主題標簽的文件。 我想擺脫一個文件夾中所有子文件夾中的空格和大寫字母,並將文件名更改為沒有空格和井號的文件名。 我怎樣才能做到這一點?

我的輸入是目錄的路徑,例如“ / Images”。 在文件夾“圖像”中,我有諸如“瑪麗”,“凱特”等文件夾。這些文件夾包含諸如“凱特#1.png”,“凱特#2.png”之類的圖像。 我想將“圖像”中的所有文件夾名稱更改為“瑪麗”,“凱特”等。並將所有文件名稱更改為“ kate1.png”,“ kate2.png”。

cd yourPath

然后嘗試這兩行:

find . -type d|awk -vq='"' '{o=$0;gsub(/[# ]/,"");$0=tolower($0)}$0!=o{printf "mv %s%s%s %s%s%s\n",q,o,q,q,$0,q}' 
find . -type f|awk -vq='"' '{o=$0;gsub(/[# ]/,"");$0=tolower($0)}$0!=o{printf "mv %s%s%s %s%s%s\n",q,o,q,q,$0,q}' 

如果打印的mv ..命令正確,請在命令末尾添加|sh ,它將為您完成工作。

在目錄Images /中,可以選擇

find . -mindepth 1 -type d | while read f; do mv -v "$f" "$(echo "$f" | tr [:upper:] [:lower:] | tr -d ' #')"; done
find . -mindepth 1 -type f | while read f; do mv -v "$f" "$(echo "$f" | tr [:upper:] [:lower:] | tr -d ' #')"; done

通過將for type in df; do ...; done起來,可以將這兩行合並為一個for type in df; do ...; done for type in df; do ...; done for type in df; do ...; done ,因為類型是唯一改變的事情; 但是我認為這更容易理解。

如果您不喜歡文件名未更改時的警告,則可以先檢查f和新文件是否相同。

編輯 :這是一個小的獨立腳本,可以完成您的任務。 正如您所說的,輸入是目錄,我假設您將其作為命令行參數$ 1傳遞給腳本。

#!/bin/bash

if [ -z "$1" ]; then
    echo "usage: $0 directory"
    exit -1
fi

cd "$1"

for type in d f
do
    find . -mindepth 1 -type $type | while read f
    do 
        mv -v "$f" "$(echo "$f" | tr [:upper:] [:lower:] | tr -d ' #')"
    done
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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