我最近成功说服我妈妈让我将她的电脑换成 Ubuntu,为了让她更容易过渡,我想为她自动完成尽可能多的任务。我设法做了很多,但是我想给她留下一个脚本,但不幸的是我对脚本一无所知。
目的是将文件夹(主要是桌面)中的所有文本文件重命名为“note*”(不带扩展名),例如重命名为“note.txt”(为了互操作性并方便上传到 google docs),并将它们移动到专门指定的文件夹中。我需要的命令是:
- find files in current folder named note* (and not ending in .txt) and rename them as note*.txt
- move files named note*.txt to /home/username/notes
不幸的是,我不知道如何将其以脚本形式呈现,所以我请求帮助。
答案1
这可能会让你开始:
#!/bin/bash
find . -name 'note*' -not -name '*txt' -exec mv -bf '{}' '{}'.txt \;
find . -name 'note*.txt' -exec mv -bf '{}' /home/username/notes/ \;
如果覆盖则使-bf
mv 不询问问题并进行备份。
答案2
打开一个终端,并使用此命令(gedit,或您最喜欢的!)打开一个文本编辑器
gedit ~/.gnome2/nautilus-scripts/注释
这将打开 Nautilus(文件浏览器)Scripts 文件夹中的一个文件,您很快就会看到一些神奇的东西 :D
现在将以下简化的代码复制到 gedit 并保存。(如果您愿意,可以使用 Marcelo Morales :P)
#!/bin/bash
# Words prefixed with a hash are comments.
# Save directory. Add in your own username and directory here.
movePath=/home/<username>/notes
# Iterate over files in current folder.
for noteFile in **
do
# Check if is a notes file (even if UPPERCASE or lowercase), and not already edited.
if [[ ${noteFile,,} == *"notes"* ]] && [[ ${noteFile,,} != *".txt" ]] && [[ ! -d "$noteFile" ]]
then
# If so, move and rename the file to your save directory.
mv "$noteFile" "$movePath/$noteFile.txt"
fi
done
赋予脚本可执行权限。
chmod u+x ~/.gnome2/nautilus-scripts/注释
现在,让我们来看看 Nautilus Scripts 的神奇之处。
右键单击包含一个或两个“notes”文件的文件夹,转到 Scripts,然后单击“Notes”,您会神奇地看到所有“notes”文件都变成了“notes*.txt”
你还能对妈妈有多友善?:P
答案3
这将安全地处理文件名。
#!/bin/bash
shopt -s extglob # see http://mywiki.wooledge.org/glob
for file in note!(*.txt); do
mv -i "$file" "$HOME/notes/$file.txt"
done
mv -i note*.txt "$HOME/notes/"
如果要不区分大小写匹配,还需要启用nocaseglob
shell 选项。
shopt -s extglob nocaseglob
编辑:另一种方法
#!/bin/bash
for file in note*; do
# Make sure it's a regular file and not the destination directory
[[ -f $file && ! $file -ef $HOME/notes ]] || continue
mv -i "$file" "$HOME/notes/${file%.[Tt][Xx][Tt]}.txt"
done
答案4
for noteFile in note*[^.txt]; do mv $noteFile /home/username/notes/$noteFile.txt; done
我更喜欢这个答案:) 唯一的缺点是它只移动已重命名的文件