selecione diretórios exclusivamente e mova para uma nova pasta

0

Eu quero mover os diretórios dentro do diretório atual para uma nova pasta

ls -al
drwxr-xr-x  16 me  staff   512 Jul  8 10:00 .
drwx------+ 16 me  staff   512 Jul  8 05:38 ..
-rw-r--r--@  1 me  staff  6148 Jul  8 04:56 .DS_Store
-rw-r--r--   1 me  staff     0 Jul  7 18:26 .md
-rw-r--r--@  1 me  staff    67 Jul  7 09:36 Actions.md
drwxr-xr-x   3 me  staff    96 Jul  8 04:56 Books
lrwxr-xr-x   1 me  staff    41 Jul  7 09:41 Coder -> /Users/me/Desktop/Django/Coder
drwxr-xr-x   5 me  staff   160 Jul  8 07:05 Git
drwxr-xr-x   8 me  staff   256 Jul  8 06:32 Linux
drwxr-xr-x   3 me  staff    96 Jul  7 11:11 Python
drwxr-xr-x  10 me  staff   320 Jul  8 05:42 SQL
drwxr-xr-x   7 me  staff   224 Jul  8 10:00 django
drwxr-xr-x   4 me  staff   128 Jul  7 18:45 error_log
-rw-r--r--@  1 me  staff  1543 Jul  8 08:38 log_details.md
-rw-r--r--@  1 me  staff   700 Jul  8 05:00 log_summary.md
-rw-r--r--@  1 me  staff    61 Jul  8 04:56 readme.md

Eu tentei o código:

#retrieve all the files and dirs
files_and_dirs=(${echo *})
#loop the array and select dirs
for fd in ${files_and_dirs[i]};
    if [[ -d "$fd"]];
        mv -r "$fd" dst_dir

No entanto, encontre um erro no primeiro passo

$ files_and_dirs=( $(echo *))
$ files_and_dirs
-bash: files_and_dirs: command not found
    
por JawSaw 08.07.2018 / 04:45

2 respostas

3

Você pode selecionar diretórios com o glob:

for d in ./*/; do
  mv "$d" dest_dir/
done

Se você fez deseja usar uma matriz + um teste explícito

files_and_dirs=( ./* )
for fd in "${files_and_dirs[@]}"; do
  if [[ -d "$fd" ]]; then
    mv "$fd" dest_dir/
  fi
done

AFAIK, ao contrário de cp , mv , não aceita a opção -r (recursiva).

files_and_dirs não foi encontrado porque não é um comando - se você quiser ver os valores na matriz, use echo "${files_and_dirs[@]}"

    
por 08.07.2018 / 04:57
0
files_and_dirs="$(echo *)"

Não há espaços ao redor do =

E, por favor, cole o código em que você está trabalhando, não uma cópia pobre. Essa resposta é baseada na mensagem de erro. Como o código não produz uma mensagem de erro, mas tem alguns problemas (falta de aspas e parênteses desnecessários).

    
por 08.07.2018 / 10:24

Tags