2017-09-27 52 views
1

for filename in $*; do mv "$filename" "${filename//.temp/}";在特定日期的unix中重命名文件

我正在使用此腳本來重命名文件。
它從文件名中刪除.temp。我已將此文件保存爲a.sh腳本,並將其與我要重命名的文件一起執行。但是如果我想重命名說100個文件並且只有特定日期,這會變得乏味。有沒有一種方法,我只傳遞日期的腳本作爲參數,並將其重命名該日期的文件,僅無需我來傳遞文件名

回答

1

您可以修改a.sh這樣的:

find . -maxdepth 1 -type f -iname "*.temp" -exec bash -c 'mv $0 ${0//.temp/}' {} \; 

newermt是上次修改文件的日期。

,並可以執行它作爲

./a.sh 2017-09-27

爲了測試是否在命令行這個命令的作品,你可以試試這個腳本之外:

find . -maxdepth 1 -type f -iname "*.temp" -exec bash -c 'mv $0 ${0//.temp/}' {} \; 
+0

獲取此錯誤> mv:invalid option - '一個' 。我用最後一條命令來檢查 – Ritesh

+0

現在試試,我已經將雙引號改爲單引號。 – batMan

+0

我用這個>>>查找。 -type f -newermt 2017-10-03! -newermt 2017-10-04 -exec bash -c'mv $ 0 $ {0 //。temp /}'{} \; >>>>你的命令是重命名所有文件。糾正我,如果我錯了 – Ritesh

0

另一種選擇是使用-nt測試

# create a timestamp file 
timestamp_filename=/tmp/$$ 
touch -t 201709270000 "$timestamp_filename" 
trap 'rm "$timestamp_filename"' EXIT 

# then to check a file is newer 
if [[ "$a_file" -nt "$timestamp_filename" ]]; then 
# a_file is newer 
fi