в файле настройки оболочки ([1183666]~/.zshrc[1183667] для [1183668]zsh[1183669], [1183670]~/.bashrc[1183671] для [1183672]bash[1183673] ...).
root (hd0,2)
kernel /kernel-genkernel [...] real_root=/dev/sda4 ro
initrd /initramfs [...]
boot
Это означает, что маска установлена на 7, но переопределите [1183674]mkdir[1183675] на функцию, где вызывается реальная [1183676]mkdir[1183677] (с теми же аргументами ([1183678] "$@"[1183679])) с маской 2. (обратите внимание, что [1183680](...)[1183681] создает подоболочку, поэтому маска [1183682]umask 2[1183683] применяется только внутри этой функции).[1183385]. В простом стиле Unix вам нужно будет закрутить файлы:
for file in 1.txt 2.txt 3.txt; do cp -pi "$file" "${file%.*}(1).txt"; done
$ {File%. *}
Удаляет расширение из имени файла, затем (1 ) .txt
Добавляет номер и восстанавливает расширение. Варианты CP
Подскажите, если цель уже существует ( -I
и сохраняет разрешения ( -P
).
Большинство систем Linux будут иметь пакет MMV
; Это позволяет просто делать
mcp '*.txt' '#1(1).txt'
это копирует каждый файл, заканчивающийся в .txt
в новый файл, соответствующий первой подстановочнойкарке ( # 1
) и добавления (1) .txt
. С скобками не нужно сбежать здесь, потому что они в кавычках.
В качестве альтернативы, если вы используете графический менеджер файлов, вы можете сделать точно так же, как и в Windows.
Это кажется тривиальным в Windows, просто выделите кучу файлов
. Я вещь тривиально в различных менеджерах файлов GUI в Linux, но вам нужно решение Shell, верно? Вот оно:
for F in *; do cp -p "$F" "${F%.*}\(1\).${F#*.}"; done
$ {F%. *}
извлекает часть имени файла перед точкой, а $ {F # *.}
Удлинитель извлечения.
set ./*.txt
while [ -e "$1" ] || [ -L "$1" ]
do case ${1##*(} in ($1|*[!0-9]*\)|\)*)
cp "$1" "${1%.*}(1).txt";;
(*\)*) set "${1##*(}" "$@"; cp \
"$2" "${2%"$1"}$((${1%)*}+1))).txt"
shift;; esac
shift; done
, что должно обрабатывать все случаи довольно хорошо, я думаю. При необходимости появится (копирование) (копирование) [11300881] (копирование) , но в противном случае будет просто вставить (1) между расширением и именем файла.
В zsh
, wildcard move или copy поставляется с оболочкой:
autoload zmv
zmv -C '(*).txt' '$1 (1).txt'
Но я бы действительно не советовал использовать для этой цели пробел в имени файла, и скобки также не идеальны. Я упоминаю об этом, потому что каждый раз, когда я сталкиваюсь с подобным шаблоном (например, x.txt
и x (1).txt
и x (2). txt
) и я хочу сделать завершение табуляции без двойных кавычек, я должен написать x
), чтобы все получилось правильно. Также, это выглядит запутанным в выводе ls
, потому что не совсем понятно, где заканчиваются имена файлов. Я бы использовал x.txt
, x.1.txt
и x.2.txt
. Таким образом, имена файлов визуально аперируют как единицы измерения, и это завершение работает: x <таб> .1 <таб>
.