Это должно быть способно надежно затереть флешку, если вы планируете использовать ее повторно: http://linux.die.net/man/1/scrub Если нет, то расплавьте ее...
В тесте [
недостаточно информации. Вам нужно сравнить $file
со ссылкой. Ваша текущая конструкция говорит «если не эта строка», но вам нужно сказать «если x не является этой строкой». Я бы использовал регулярное выражение, то есть с [[
вместо [
. Следовательно,
#!/bin/bash
GLOBIGNORE=.:..
for file in.*; do
if [[ ! "$file" =~ \.backup$ ]]; then
cp "$file" "$file.backup"
fi
done
/bin/bash
,чтобы конструкция [[
работала. GLOBIGNORE
, чтобы скрипт не пытался копировать .
и..
Еще кое-что:
./
в путях не нужно. Вы уже находитесь в этом каталоге! “
вместо "
. Вот чистая /bin/sh
версия. Вместо использования башизма [[
я использовал случай .
#!/bin/sh
GLOBIGNORE=.:..
for file in.*; do
case "$file" in
*.backup) ;;
*) cp "$file" "$file.backup";;
esac
done
Почему бы нам просто не использовать sed
для резервного копирования?
sed -i.bak 's#\n#\n#' <filepattern*>
Оператор !
просто инвертирует свой операнд, поэтому условие всегда оценивается как false
. Существуют операторы проверки файлов, например -f
, которые возвращают true, если файл существует.
Однако я не уверен, что вы все делаете правильно, поскольку безопасно не только создание резервной копии, если она не существует, но и не всегда перезапись существующих резервных копий.
Мог бы и так.
#!/bin/sh
for file in.*; do
if [ ! -f "./${file}.backup" ]; then
cp "./${file}" "./${file}.backup"
fi
done
Если ваше предполагаемое поведение:
тогда, возможно, вы могли бы использовать find:
gunhed@gstation:[~/test]0$ ls -la
insgesamt 2
drwxrwxr-x 2 gunhed gunhed 0 Dez 30 20:45.
drwxr-x--- 100 gunhed gunhed 0 Dez 30 20:44..
-rw-rw-r-- 1 gunhed gunhed 0 Dez 30 20:39.test
-rw-rw-r-- 1 gunhed gunhed 0 Dez 30 20:39.test2
-rw-rw-r-- 1 gunhed gunhed 0 Dez 30 20:39.test3
-rw-rw-r-- 1 gunhed gunhed 0 Dez 30 20:39.test4
gunhed@gstation:[~/test]0$ find. -maxdepth 1 -type f -regex "^.*[^.bak]$" -exec cp -vn {} {}.bak \;
'./.test4' -> './.test4.bak'
'./.test3' -> './.test3.bak'
'./.test' -> './.test.bak'
'./.test2' -> './.test2.bak'
gunhed@gstation:[~/test]0$ find. -maxdepth 1 -type f -regex "^.*[^.bak]$" -exec cp -vn {} {}.bak \;
gunhed@gstation:[~/test]0$ ls -la
insgesamt 4
drwxrwxr-x 2 gunhed gunhed 0 Dez 30 20:45.
drwxr-x--- 100 gunhed gunhed 0 Dez 30 20:44..
-rw-rw-r-- 1 gunhed gunhed 0 Dez 30 20:39.test
-rw-rw-r-- 1 gunhed gunhed 0 Dez 30 20:39.test2
-rw-rw-r-- 1 gunhed gunhed 0 Dez 30 20:45.test2.bak
-rw-rw-r-- 1 gunhed gunhed 0 Dez 30 20:39.test3
-rw-rw-r-- 1 gunhed gunhed 0 Dez 30 20:45.test3.bak
-rw-rw-r-- 1 gunhed gunhed 0 Dez 30 20:39.test4
-rw-rw-r-- 1 gunhed gunhed 0 Dez 30 20:45.test4.bak
-rw-rw-r-- 1 gunhed gunhed 0 Dez 30 20:45.test.bak
gunhed@gstation:[~/test]0$
найти используемые опции:
Возможно, это альтернативный путь. Надеюсь, не слишком загадочно. Найти помогает во многих случаях;-)