我在UNIX目錄一堆文件:延期之前刪除從Unix文件名最後n個字符
test_XXXXX.txt
best_YYY.txt
nest_ZZZZZZZZZ.txt
我需要我使用KSH AIX上的這些文件重命名爲
test.txt
best.txt
nest.txt
請讓我知道如何使用Single命令完成上述操作。
感謝,
我在UNIX目錄一堆文件:延期之前刪除從Unix文件名最後n個字符
test_XXXXX.txt
best_YYY.txt
nest_ZZZZZZZZZ.txt
我需要我使用KSH AIX上的這些文件重命名爲
test.txt
best.txt
nest.txt
請讓我知道如何使用Single命令完成上述操作。
感謝,
如果這是一次性的(或不經常)之際,我想如果經常出現這種需要創建
$ ls > rename.sh
$ vi rename.sh
:%s/\(.*\)/mv \1 \1/
(edit manually to remove all the XXXXX from the second file names)
:x
$ source rename.sh
一個腳本,我需要更多的洞察XXXXX,YYY和ZZZZZZZZZZZ都是。
補遺
修改這個根據自己的喜好:
ls | sed "{s/\(.*\)\(............\)\.txt$/mv \1\2.txt \1.txt/}" | sh
它通過.txt
之前省略12個字符,使所得mv
命令到一個外殼轉換文件名。
注意:如果有不匹配的文件名,它會執行文件名—而不是mv
命令。我省略了一種只選擇匹配文件名的方法。
在這種情況下,您似乎有一個_
要啓動要刪除的每個部分。如果是這樣的話,那麼這應該工作:
for f in *.txt
do
g="${f%%_*}.txt"
echo mv "${f}" "${g}"
done
取出echo
如果輸出似乎是正確的,或與done | ksh
替換的最後一行。
如果文件不是所有.txt
文件,這更多的是小將軍:
for f in *
do
ext="${f##*.}"
g="${f%%_*}.${ext}"
echo mv "${f}" "${g}"
done
感謝您的回覆。如何擴展你的代碼到一個情況,我必須刪除擴展名爲.txt之前的最後12個字符,例如。 – user2417881
如果它恰好是12,那麼''{f%????????????}'(12'?'s)將在您已經刪除擴展名後生效,如果您的'ksh'是新的......或者'$ {f%{12}(?)}'。這些都是'ksh'某些版本中的所有新特性,所以請查看系統中的'man ksh'以獲取更多信息... – twalberg
那麼,讓我這樣說:在文件名中的.txt之前刪除的最後12個字符。 – user2417881
我可能正在考慮如何在擴展名爲.txt之前的最後n個字符完成此操作,其中n是可變的。但具體而言,這是最後12個字符。而且這一定要經常進行。 – user2417881
@ user2417881:我修改了我的答案。請注意,它的範圍有限。 – wallyk