需要一些帮助来创建脚本来重命名文本文件并将其移动到目录

需要一些帮助来创建脚本来重命名文本文件并将其移动到目录

我最近成功说服我妈妈让我将她的电脑换成 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/ \;

如果覆盖则使-bfmv 不询问问题并进行备份。

答案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/"

如果要不区分大小写匹配,还需要启用nocaseglobshell 选项。

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

我更喜欢这个答案:) 唯一的缺点是它只移动已重命名的文件

相关内容