
您好,我有一堆名稱中帶有空格的文件,有沒有辦法將它們轉移到不帶空格的新文件。顯然,對於一個文件,我可以使用 mv 命令,但我想對資料夾中的所有文件執行此操作。
謝謝
答案1
您可以使用t或者sed為此的命令:
for file in *.pdf
do
newname=$(echo $file | tr ' ' _)
mv "$file" $newname
done
請注意,這使用較新的 POSIX 語法進行命令替換:$(命令)。
如果您使用的是非常舊的 Bourne shell,則需要使用反引號:
newname=`echo $file | tr ' ' _`
答案2
以下是我用於此任務的幾個腳本:
#!/bin/ksh
# Name : unspace - replace spaces by underscores in file names
# Usage : unspace [file ...]
# Example : unspace *.doc
unspace()
{
ls "$@" | while a=$(line)
do
file=$(echo $a | grep " ")
if [ -n "$file" ]
then
file="$(print "$file" | sed 's/ /_/g')"
print "$a" "->" "$file"
mv "$a" "$file"
fi
done
}
[[ "$(basename $0)" = unspace ]] && unspace "$@"
下面是遞歸修復目前目錄下的所有名稱。請注意,如果目錄名稱也包含嵌入空格,則仍然需要一些工作。
#!/bin/ksh
find . |
while a=$(line)
do
newName="$(print $a | tr ' ' '_')"
if [ "$a" != "$newName" ]
then
mv "$a" "$newName"
print $a moved
else
print $a unchanged
fi
done
答案3
如果你有bash,則無需呼叫外部工具
for file in *.pdf
do
if [ -f "$file" ];then
echo mv "$file" "${file// /_}"
fi
done