получить первые символы параметра раскрытия команды find

Проверьте текущий каталог, в котором вы находитесь:

$ pwd

Если вы не в $ HOME / Desktop / , перейдите к нему (используя cd ~ / Desktop / ). После выполните эту команду:

$ ls 

Эта команда выведет список всех файлов в текущем каталоге, проверьте, нашли ли вы myfile.py . Если вы предпочитаете, вы можете фильтровать свой поиск с помощью grep, например:

$ ls | grep 'myfile.py'

После того, как вы убедитесь, что в текущем каталоге у вас есть файл с именем myfile.py , вы сможете запустить:

python3 myfile.py > myfile.html
1
01.04.2017, 17:14
2 ответа
src="/pathto/large_folder"
dest="/tmp/3chars"

mkdir -p "$dest" || exit 1

cd "$src" && \
find . -type f -name '???*' -exec sh -c '
   for f
   do
      b=${f##*/}
      d=${b%"${b#???}"}_.jpg
      [ -d "$dest/$d" ] || mkdir -p "$dest/$d"
      mv "$f" "$dest/$d/."
   done
' x {} +
1
27.01.2020, 23:34

Существуют инструменты, значительно упрощающие переименование файлов. Например, используя любую из реализаций Perl rename, часто доступных под именем prename:

prename '$dir = substr($_,0,3); mkdir $dir; $_ = "$dir/$_"' *.jpg

Если каталоги уже существуют, вы можете упростить это до

prename 's!(...)!$1/$1!' *.jpg

Если ваш дистрибутив не содержит prename, установите его, например Unicode::Tussle или File::Rename.

find, вероятно, здесь бесполезна, так как все файлы находятся в одном каталоге. Однако вы можете столкнуться с ошибкой, потому что командная строка слишком длинная. find — один из способов решить эту проблему; вы можете использовать

find -maxdepth 1 -name '*.jpg' -exec prename 's!(...)!$1/$1!' {} +

В качестве альтернативы запустите zsh вместо bash и воспользуйтесь его функцией zmv.

autoload zmv        # you can put this in ~/.zshrc
mkdir_mv () {
  mkdir -p -- $2:h
  mv -- $1 $2
}
zmv -p mkdir_mv '(???)*.jpg' '$1/$f'

Если каталоги уже существуют, вы можете использовать просто

zmv '(???)*.jpg' '$1/$f'
1
27.01.2020, 23:34

Теги

Похожие вопросы