O que é a contraparte DOS do comando bash “ls -lad” no Unix?

3

Qual é a contrapartida DOS do comando bash ls -lad no Unix?

O comando "dir" no Prompt de Comando (cmd.exe) no Windows é geralmente considerado equivalente ao comando "ls" do bash no Unix / Linux. No entanto, "dir" não possui o recurso da opção "-d" de "ls". A opção "-d" trata os diretórios como arquivos simples e impede que seus arquivos e subdiretórios filhos sejam exibidos.

ls -lad ITEM
  1. Basicamente, o que preciso é a existência e o tipo do ITEM fornecido.
  2. Quanto ao tipo, preciso saber se é um diretório, um arquivo regular ou um link.
  3. Se for um diretório, não quero que seus arquivos secundários nem subdiretórios sejam exibidos.
  4. Se for um link, preciso saber o destino.

Existe algum comando do DOS (ou até mesmo o comando do PowerShell) com esses recursos (1) a (4)?

dir ITEM /a
attrib ITEM

O comando "attrib" no DOS também informa a existência do ITEM fornecido; e, se for um diretório, "attrib" se abstém de exibir seus arquivos e subdiretórios filhos. No entanto, "attrib" não consegue dizer se é um diretório, um arquivo regular ou um link.

    
por i7pj3qnuz 16.11.2016 / 09:50

1 resposta

3

Qual é a contrapartida DOS do comando bash ls -lad ?

Não há equivalente direto. Você pode, é claro, instalar o Cygwin ou o Windows Subsystem para Linux e executar ls -lad diretamente.

Você também pode criar um arquivo em lote que fará a maior parte do que você deseja. Abaixo estão algumas dicas.

Para verificar a existência de um arquivo:

if exist filename (
  echo filename exists
  )

Para verificar se um arquivo é um diretório:

if exists filename\nul (
  echo directory
) else (
  echo file
)

Para verificar se um arquivo é um link:

dir /a:l filename | find "<SYMLINK>" >nul && echo file symbolic link

Para verificar se um diretório é um link:

dir /a:l filename | find "<SYMLINKD>" >nul && echo directory symbolic link

Para obter o destino de um link de arquivo:

for /f "usebackq delims=[] tokens=2" %i in ('dir /a:l filename ^| find "<SYMLINK">') do @echo %i

Para obter o destino de um link de diretório:

for /f "usebackq delims=[] tokens=2" %i in ('dir /a:l filename* ^| find "<SYMLINKD>"') do @echo %i

Leitura Adicional

  • Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
  • dir - Exibe uma lista de arquivos e subpastas.
  • find - Procure uma string de texto em um arquivo & exibir todas as linhas onde ele é encontrado.
  • para / f - Comando Loop: contra um conjunto de arquivos - condicionalmente executar um comando em cada item.
  • if - Realize condicionalmente um comando.
por 16.11.2016 / 11:10