Начиная с Ubuntu12.10, в Unity добавлен новый объектив для покупок. Вы можете узнать больше об этом на OMG! Ubuntu! , Этот объектив включает все соответствующие результаты от Amazon.
Откройте терминал и откройте текстовый редактор, используя эту команду (gedit или ваш любимый!)
gedit ~ / .gnome2 / nautilus-scripts / NotesЭто откроет файл в папке Scripts Nautilus (файл браузера) для некоторой магии, которую вы скоро увидите: 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
Предоставить исполняемые разрешения сценария.
gedit ~ / .gnome2 / nautilus-scripts / Notes [ ! d2]
chmod u + x ~ / .gnome2 / nautilus-scripts / Notes
Теперь, чтобы увидеть магию скриптов Nautilus. Щелкните правой кнопкой мыши в папке с файлом «примечания» или двумя внутри, перейдите в «Сценарии», а затем нажмите «Заметки», и вы будете волшебным образом видеть, что все ваши файлы заметок превращаются в «notes * .txt»
Это может заставить вас начать:
#!/bin/bash
find . -name 'note*' -not -name '*txt' -exec mv -bf '{}' '{}'.txt \;
find . -name 'note*.txt' -exec mv -bf '{}' /home/username/notes/ \;
-bf заставляет mv не задавать вопросы и выполнять резервное копирование при перезаписи.
Это будет безопасно обрабатывать имена файлов.
#!/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.
shopt -s extglob nocaseglob [!d2 ]
EDIT: Другой подход
#!/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
Обновленная версия: согласно полезным предложениям geirha.
Я избавился от массива, что было совершенно ненужным, и внесло изменения в то, как и какие глобальные настройки установлены / не установлены. Оригинальная версия по-прежнему включена; (для сравнения)
################################################
cd ~/ # create sample files with embedded spaces
touch note\ {1..3}
################################################
#
tdir="$HOME/notes"; # make target dir
[[ ! -d "$tdir" ]] && mkdir -p "$tdir"
#
shopt -q nullglob; Xnullglob=$? # state of nullglob
shopt -s nullglob # enable nullglob
shopt -s extglob # enable extglob
#
for f in note!(*.txt) ; do
if [[ -f $f ]] ; then
mv -i "$f" "$tdir/$f.txt"
fi
done
#
((Xnullglob==1)) && shopt -u nullglob # Reset nullglob
#
Оригинальная версия (с дополнительным треском):
cd ~/
# create some sample files with embedded spaces
touch note\ {1..3}
#
tdir="$HOME/notes"; # make target dir if not present
[[ ! -d "$tdir" ]] && mkdir -p "$tdir"
#
state=($(shopt extglob)) # Save extended globbing state
[[ ${state[1]} == off ]] && shopt -s extglob
#
farray=( note!(*.txt) ) # Build an array of filenames
fcount=${#farray[@]} # Get size of the array
#
for ((findex=0; findex<fcount; findex++));do
if [[ -f "${farray[findex]}" ]] ; then
echo -e $findex "${farray[findex]}"
mv -i "${farray[findex]}" \
"$tdir/${farray[findex]}.txt"
fi
done
#
[[ ${state[1]} == off ]] && shopt -u extglob # Reset extglob
#
# `mv -i` will interactively check with you before overwiting and existing file.
# You can use `mv -bf` to backup an existing file before overwriting it.
for noteFile in note*[^.txt]; do mv $noteFile /home/username/notes/$noteFile.txt; done
Мне нравится этот ответ лучше :) Единственным недостатком является то, что он перемещает только файлы, которые он переименовал
Это безопасно будет обрабатывать имена файлов.
#!/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
.
shopt -s extglob nocaseglob
EDIT: Другой подход
#!/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
Это безопасно будет обрабатывать имена файлов.
#!/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
.
shopt -s extglob nocaseglob
EDIT: Другой подход
#!/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