Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: Linux Homework
Hi,
 
I need the command to find all the 2 letter commands like rm, ls, cp, mv in all the diectories that ends with 'bin'.
 
I have found those directories using the command
ls -alR / 2>/dev/null | grep '^d' | gerp 'bin$'
 
Please help.
Posted 22-Nov-12 20:13pm
srmohanr1.1K
Edited 23-Nov-12 3:19am
v3
Comments
Sergey Alexandrovich Kryukov at 23-Nov-12 2:07am
   
Sorry, I feel that this is not quite a topic adequate to the site devoted to software development. Manipulations with bash commands, even tricky, is not quite programming... this is still user's level...
--SA
srmohanr at 23-Nov-12 2:10am
   
Please tell me whether
find / -type f -name "??" | grep '/*bin/' 2>/dev/null, will work correctly
Richard MacCutchan at 23-Nov-12 6:43am
   
Why don't you try it for yourself?
srmohanr at 23-Nov-12 7:47am
   
I am not having terminals with me. Please help
Richard MacCutchan at 23-Nov-12 7:57am
   
Neither am I. If you don't have access to a Unix/Linux system then why do you need this command?
srmohanr at 23-Nov-12 8:05am
   
this for my college assignment.
Richard MacCutchan at 23-Nov-12 8:19am
   
In that case your teacher will be expecting you to do the work for yourself by reading your study guides and notes.
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 2

We are developers, after all (error handling left to the reader):
 
/* finds recursively files having 2-letters name in directories whoose name ends with 'bin'
  usage:
    rd [<DIRNAME>]
 
  on <DIRNAME> missing, current directory is used
*/
 
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <dirent.h>

#define BUFSIZE 0x400
 
int has_slash(const char * buf, size_t len);
 
int rd(const char * nam, int check)
{
  char buf[BUFSIZE];
 
  DIR * d = opendir(nam);
 
  if (d)
  {
    struct dirent *entry;
    while   ((entry = readdir(d)) != NULL)
    {
      if ( check && entry->d_type == DT_REG )
      {
        if (strlen(entry->d_name)==2)
        {
          printf("%s/%s\n", nam, entry->d_name);
        }
      }
 
      if (entry->d_type == DT_DIR)
      {
        int check;
        int len;
        strcpy( buf, nam );
        if ( ! has_slash(nam, strlen(nam)))
          strcat(buf, "/");
        strcat(buf, entry->d_name);
        len = strlen(entry->d_name);
        check =  ! strncmp( &entry->d_name[len-3], "bin", 3);
        if ( strcmp(".", entry->d_name) && strcmp("..", entry->d_name))
          rd(buf, check);
      }
    }
  }
  closedir(d);
  return 0;
}
 
int has_slash(const char * buf, size_t len)
{
  if ( len < 1) return 0;
  if ( buf[len-1] == '/' ) return 1;
  return 0;
}
 
int is_bin(const char * buf, size_t len)
{
  if ( has_slash( buf, len) )
  {
    len--;
  }
  if ( len < 3)
    return 0;
  else if ( len == 3 )
  {
    if ( ! strncmp(buf, "bin",3))
      return 1;
  }
  else
  {
    if ( !strncmp(&buf[len-4], "/bin", 4))
      return 1;
  }
  return 0;
}
int main (int argc, char * argv[])
{
  char buf[BUFSIZE];
 
  if (argc > 1)
  {
    strncpy(buf, argv[1], BUFSIZE-1);
    buf[BUFSIZE-1] = '\0';
  }
  else
  {
    getcwd(buf, sizeof(buf));
  }
 
  rd( buf, is_bin(buf, strlen(buf)));
 
  return 0;
}                                                                                                              
 
output example:
$ ./rd /
 
/sbin/tc
/sbin/ss
/usr/lib/klibc/bin/ls
/usr/lib/klibc/bin/ln
/usr/lib/klibc/bin/dd
/usr/bin/pg
/usr/bin/pr
/usr/bin/m4
/usr/bin/at
/usr/bin/ar
/usr/bin/gs
/usr/bin/lp
/usr/bin/nm
/usr/bin/dc
/usr/bin/7z
/usr/bin/du
/usr/bin/wc
/usr/bin/bc
/usr/bin/tr
/usr/bin/ab
/usr/bin/uz
/usr/bin/od
/usr/bin/ul
/usr/bin/as
/usr/bin/nl
/usr/bin/xz
/usr/bin/id
/bin/ls
/bin/ip
/bin/cp
/bin/su
/bin/ln
/bin/mv
/bin/dd
/bin/ps
/bin/rm
/bin/df
  Permalink  
v2
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

You already asked this question here[^] and I gave you a suggestion to get started. Have you looked at the find command and read the man pages for it? How about grep and awk?
  Permalink  

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 OriginalGriff 295
1 DamithSL 265
2 CPallini 235
3 Maciej Los 190
4 Sergey Alexandrovich Kryukov 174
0 OriginalGriff 5,415
1 DamithSL 4,422
2 Maciej Los 3,820
3 Kornfeld Eliyahu Peter 3,470
4 Sergey Alexandrovich Kryukov 2,911


Advertise | Privacy | Mobile
Web03 | 2.8.141216.1 | Last Updated 24 Nov 2012
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100