前綴我有一堆目錄,每個都具有多個文件的文件夾中的所有文件。重命名文件夾名與
dir1
|- part1.txt
|- part2.txt . . .
dir2
|- part1.txt
|- part2.txt . . .
我想內部文件(part1.txt
等)重命名爲類似(dir1_part1.txt
)。這怎麼能在Ubuntu下完成?
This question解釋後綴前綴如何可以添加或刪除。但是,如何添加前綴作爲目錄名稱?
前綴我有一堆目錄,每個都具有多個文件的文件夾中的所有文件。重命名文件夾名與
dir1
|- part1.txt
|- part2.txt . . .
dir2
|- part1.txt
|- part2.txt . . .
我想內部文件(part1.txt
等)重命名爲類似(dir1_part1.txt
)。這怎麼能在Ubuntu下完成?
This question解釋後綴前綴如何可以添加或刪除。但是,如何添加前綴作爲目錄名稱?
有一個叫perl-rename
工具,有時也被稱爲rename
,不要與rename
from util-linux混淆。該工具需要一個Perl的表達和accordently重命名:
perl-rename 's~/~_~' dir1/* dir2/*
以上將重命名,並將所有文件dir1
和dir2
以下幾點:
dir1/file1 -> dir1_file1
dir1/file2 -> dir1_file2
dir1/file3 -> dir1_file3
好了,這是一個簡單的例子。
$ mkdir dir{1..5}
$ touch dir{1..5}/part{1..5}.txt
# the command above create the files for testing
# then do the rename action
$ for f in dir*/*;do mv -v $f $(dirname $f)/$(dirname $f)_$(basename $f);done
使用find
和parameter-expansion查找的目錄名稱的簡單bash
腳本。
#!/bin/bash
find . -name "*.csv" -type f -printf '%f\n' |
while read -r x; do
mv -v "$x" "${PWD##*/}_$x"
done
要使用特殊字符處理文件: -
處理包含換行符或其他類型的空格或其他特殊字符的文件名,我採用-print0
從find
和一個讀取它們解除限制器''
: -
我再次使用參數擴展,從find命令中刪除前導字符./
。
#!/bin/bash
find . -name "*.csv" -type f -print0 |
while IFS= read -r -d '' x; do
x="${x:2}"
mv -v "$x" "${PWD##*/}_$x"
done
工作的示例: -
[[email protected]_folder]$ ls *.csv
1.csv 2.csv 3.csv 4.csv
[[email protected]_folder]$ ./myScript.sh
`1.csv' -> `csv_folder_1.txt'
`2.csv' -> `csv_folder_2.txt'
`3.csv' -> `csv_folder_3.txt'
`4.csv' -> `csv_folder_4.txt'
我如何得到一個目錄列表作爲前綴? –
你真的花時間學習基本的shell腳本嗎?如果是這樣,請顯示您的嘗試腳本。有很多不同的方法來獲取目錄名,最好的方法可能取決於你如何編寫腳本的其餘部分。 – kaylum
['重命名-v的|([^ /] *)/([^ /] *)$ | $ $ 1_ 2 |' */*'](http://www.unix.com/man-page/linux/1/rename/) – anishsane