Существует набор инструментов копирования файла, которые позволяют создавать целевое имя каталога с достаточно гибкими правилами (zcp
, rsync
, pax
, …). К сожалению, немногие из них позволяют оба перемещения (в противоположность копированию) и создание целевых каталогов по требованию. Таким образом, я покажу, что некоторые пути делают это в двух передачах: сначала создайте все потенциально необходимые целевые каталоги, затем выполните перемещение.
Perl rename
программа, поставленная Debian и Ubuntu, может создать целевой каталог при необходимости, если Вы пишете необходимый бит Perl.
shopt -s globstar # make **/ traverse directories recursively (requires bash 4)
rename 'BEGIN {use File::Path}
s!^/data!/raw_data!;
m!(.*)/!; mkpath($1)' /data/**/*.raw
В zsh опустите shopt -s globstar
строка; **
означает рекурсивный обход по умолчанию. В оболочках кроме удара и zsh, необходимо использовать find
для рекурсивных обходов (см. примеры ниже). Не волнуйтесь обо всем этом, если у Вас есть единственный уровень каталогов.
В zsh (объяснение: /
спецификатор шарика означает соответствовать только каталогам, и e
спецификатор шарика применяет преобразование, данное впоследствии каждому имени):
mkdir /data/**/*(/e\''REPLY=${REPLY/data/raw_data}'\')
С другими оболочками:
find /data -type d \
-exec sh -c 'for d; do mkdir "/raw_data${d#/data}"; done' _ {} +
Если у Вас только есть один уровень подкаталогов, это намного более просто:
for d in /data/*/; do mkdir "/raw_data${d#/data}"; done
autoload zmv
zmv -Q '/data/(**/)(*.raw)(.)' '/raw_data/$1$2'
find /data -name '*.raw' \
-exec sh -c 'for x; do mv "$x" "/raw_data${x#/data}"; done' _ {} +
См. этот связанный ответ переполнения стека - https://stackoverflow.com/questions/2927672/how-can-i-get-git-status-to-always-use-short-format
Похоже, что наилучший вариант сделал бы псевдоним, таким образом, Вы могли ввести git s
получить короткий список вместо git status --short
и затем просто используйте git status
для --verbose
список.
git config --global alias.s 'status --short'
gits
это выполнилосьgit status --short
; Я предполагаю, что это сохранило бы Вас одно нажатие клавиши :P – paulrehkugler 08.05.2012, 05:17